zoukankan      html  css  js  c++  java
  • s便携小方法,你值得拥有

    引言:

      本章没有深奥的讲解js一些底层原理,比如this指针、作用域、原型啦,涉及的都是一些有利于平时开发时简化代码,提高执行效率或者说可以当做一种经验方法来使用,篇幅都不长,小步快跑的让你阅读完整篇文章。


    获取两个区间之内随机数

    function getRandomNum(Min, Max){ // 获取两个区间之内随机数
            var Range = Max - Min + 1;
            var Rand = Math.random();
            return Min + Math.floor(Rand * Range);
     };

    随机返回一个 正/负参数

    function getRandomXY(num){ // 随机返回一个 正/负参数
        num = new Number(num);
        if (Math.random() <= 0.5) 
            num = -num;
        return num;
    }

    setInterval()或setTimeOut()计时器函数传参

     
    var s = '我是参数';
    function fn(args) {
        console.log(args);
    }
    var a = setInterval(fn(s),100);    // xxxxxx错误xxxxx
    var b = setInterval(function(){    // 正确,用匿名函数调用被计时函数
        fn(s);
    }, 100);
     

    setInterval()或setTimeOut()计时器递归调用

     
    var s = true;
    function fn2(a, b){        //  步骤三
        if (s) {
            clearInterval(a);
            clearInterval(b);
        }
    };
    function fn(a){     //  步骤二
        var b = setInterval(function(){
            fn2(a, b) // 传入两个计时器
        }, 200)
    };
    var a = setInterval(function(){      //  步骤一
        fn(a); // b代表计时器本身,可座位参数传递
    }, 100);
     

    字符串转换为数字

    // 无需 new Number(String)   也无需 Number(String) 只需字符串减去零即可
    var str = '100';  // str: String
    var num = str - 0;// num: Number

    空值判断

    var s = '';  // 空字符串
    if(!s)         // 空字符串默认转换为布尔false,可以直接写在判断语句里面
    if(s != null) // 但是空字符串 != null
    if(s != undefined) // 空字符串也 != undefined

    IE浏览器parseInt()方法

    // 下面的转换在IE下为0,其他浏览器则为1,这跟IE浏览器解释数字的进制有关
    var iNum = parseInt(01);
    // 所以,兼容的写法为
    var num = parseInt(new Number(01));

    Firebug便捷调试js代码

     
    //Firebug内置一个console对象,提供内置方法,用来显示信息
    /**
     * 1:console.log(),可以用来取代alert()或document.write(),支持占位符输出,字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)。如:console.log("%d年%d月%d日",2011,3,26)
     * 2:如果信息太多,可以分组显示,用到的方法是console.group()和console.groupEnd()
     * 3:console.dir()可以显示一个对象所有的属性和方法
     * 4:console.dirxml()用来显示网页的某个节点(node)所包含的html/xml代码
     * 5:console.assert()断言,用来判断一个表达式或变量是否为真
     * 6:console.trace()用来追踪函数的调用轨迹
     * 7:console.time()和console.timeEnd(),用来显示代码的运行时间
     * 8:性能分析(Profiler)就是分析程序各个部分的运行时间,找出瓶颈所在,使用的方法是console.profile()....fn....console.profileEnd()
     */
     

    快速取当前时间毫秒数

    // t == 当前系统毫秒值,原因:+号运算符会,会调用Date的valueOf()方法。
    var t = +new Date();  

    快速取小数整数位

    // x == 2,以下x值都为2,负数也可转换
    var x = 2.00023 | 0;
    // x = '2.00023' | 0;

    两个变量值互换(不用中间量)

    var a = 1;
    var b = 2;
    a = [b, b=a][0]
    alert(a+'_'+b)    // 结果 2_1,a和b的值已经互换。

    逻辑或'||'运算符

    // b不为null:a=b, b为null:a=1。
    var a = b || 1;
    // 较常见的用法为为一个插件方法传参,和获取事件目标元素:event = event || window.event
    // IE有window.event对象,而FF没有。

    只有方法对象才有prototype原型属性

     
    // 方法有对象原型prototype属性,而原始数据没有该属性,如  var a = 1, a没有prototype属性
    function Person() {} // 人的构造函数
    Person.prototype.run = function() { alert('run...'); } // 原型run方法
    Person.run(); // error
    var p1 = new Person(); // 只有在new操作符时,此时才会把原型run方法赋值给p1
    p1.run(); // run...
     

    快速获取当天为星期几

    // 计算系统当前时间是星期几
    var week = "今天是:星期" + "日一二三四五六".charat(new date().getday());

    闭包偏见

     
    /**
     * 闭包:任何一个js方法体都可以称为一个闭包,并非什么只有内嵌函数来引用了外部函数的某个参数或属性才会发生。
     * 它有一个独立作用域,在该作用域内可存在若干的子作用域(就是方法嵌套方法),最终该闭包作用域为最外层方法的作用域
     * 它包含了本身方法参数和所有内嵌函数的方法参数,所以当一个内嵌函数在外部有引用时,该引用的作用域为引用函数所在的(顶级)方法作用域
     */ 
    function a(x) {
        function b(){
            alert(x); // 引用外部函数参数
        }
        return b;
    }
    var run = a('run...'); 
    // 由于作用域的扩大,可以引用到外部函数a的变量并显示
    run(); // alert(): run..
     

    获取地址参数字符串和定时刷新

     
    // 获取问号?后面的内容,包括问号
    var x = window.location.search 
    // 获取警号#后面的内容,包括#号
    var y = window.location.hash 
    // 配合定时器可实现网页自动刷新
    window.location.reload();
     

    Null和Undefined

     
    /**
     * Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。
     * Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
     * ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。
     * 但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法
     * 在进行判断时根据需要,判断对象是否有值时最好用‘===’强类型判断。
     */
    var a;
    alert(a === null); // false,因为a不是一个空对象
    alert(a === undefined); // true,因为a未初始化,值为undefined
    // 引申
    alert(null == undefined); // true,因为‘==’运算符会进行类型转换,
    // 同理
    alert(1 == '1'); // true
    alert(0 == false); // true,false转换为Number类型为0
     

    给方法动态添加参数

    // 方法a多了一个参数2
    function a(x){
        var arg = Array.prototype.push.call(arguments,2);
        alert(arguments[0]+'__'+arguments[1]);
    }

    自定义SELECT边框样式

     
    <!-- 复制到页面试试效果吧,可以随意自定义样式 -->
    <span style="border:1px solid red; position:absolute; overflow:hidden;" >
        <select style="margin:-2px;">
            <option>自定义SELECT边框样式</option>
            <option>222</option>
            <option>333</option>
        </select>
    </span> 
     

    最简单的调色盘

    <!-- JS来提取其value值即可给任意对象设置任意颜色哦 -->
    <input type=color />

    函数、对象 is 数组?

     
    var anObject = {}; //一个对象
    anObject.aProperty = “Property of object”; //对象的一个属性
    anObject.aMethod = function(){alert(“Method of object”)}; //对象的一个方法
    
    //主要看下面:
    alert(anObject[“aProperty”]); //可以将对象当数组以属性名作为下标来访问属性
    anObject[“aMethod”](); //可以将对象当数组以方法名作为下标来调用方法
    for( var s in anObject) //遍历对象的所有属性和方法进行迭代化处理
    alert(s + ” is a ” + typeof(anObject[s]));
    
    // 同样对于function类型的对象也是一样:
    var aFunction = function() {}; //一个函数
    aFunction.aProperty = “Property of function”; //函数的一个属性
    aFunction.aMethod = function(){alert(“Method of function”)}; //函数的一个方法
     //主要看下面:
    alert(aFunction[“aProperty”]); //可以将函数当数组以属性名作为下标来访问属性
    aFunction[“aMethod”](); //可以将函数当数组以方法名作为下标来调用方法
    for( var s in aFunction) //遍历函数的所有属性和方法进行迭代化处理
    alert(s + ” is a ” + typeof(aFunction[s]));
     
     
    /**
     * 是的,对象和函数可以象数组一样,用属性名或方法名作为下标来访问并处理。
     * 那么,它到底应该算是数组呢,还是算对象?我们知道,数组应该算是线性数据结构,线性数据结构一般有一定的规律,适合进行统一的批量迭代操作等,有点像波。
     * 而对象是离散数据结构,适合描述分散的和个性化的东西,有点像粒子。
     * 因此,我们也可以这样问:JavaScript 里的对象到底是波还是粒子?如果存在对象量子论,那么答案一定是:波粒二象性!
     * 因此,JavaScript里的函数和对象既有对象的特征也有数组的特征。这里的数组被称为“字典”,一种可以任意伸缩的名称值对儿的集合。其实, object和function的内部实现就是一个字典结构,但这种字典结构却通过严谨而精巧的语法表现出了丰富的外观。正如量子力学在一些地方用粒子来 解释和处理问题,而在另一些地方却用波来解释和处理问题。你也可以在需要的时候,自由选择用对象还是数组来解释和处理问题。只要善于把握 JavaScript 的这些奇妙特性,就可以编写出很多简洁而强大的代码来。
     */ 
     

    :)如有不错的方法还请慷慨留言推荐,我会一并加入进来。

    ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4081517.html

                              写作不易,难免有疏漏和错误,还请慷慨指正,不错请推荐

  • 相关阅读:
    纯MATLAB版本 SIFT代码
    hadoop2.4集群的搭建
    hadoop2.4的伪集群的搭建
    linux 下的ssh免密登陆设置
    linux 下的常用操作命令
    linux中的IP地址的修改
    使用idea创建maven多模块项目
    Hudson的使用
    创建线程的几种方法
    idea添加内存
  • 原文地址:https://www.cnblogs.com/jameslif/p/4129005.html
Copyright © 2011-2022 走看看