zoukankan      html  css  js  c++  java
  • JavaScript小技巧总结

    JavaScript是一种脚本语言:

    1. 语法类似于常见的高级语言
    2. 脚本语言,不需要编译就可以由解释器直接运行
    3. 变量松散定义
    4. 面向对象

    JSON是一种数据交换格式,而JSONP是JSON的一种使用模式,是基于JSON的。简单说JSON是协议,而JSONP是使用这种协议的一种方法。


    函数分类

    函数声明: function add(a,b){}

    函数表达式:
    var add=function(a,b){}

    (function(){})(); 立即执行函数

    return function(){};

    var add=function foo(a,b){};

    this

    全局的this 指向浏览器 this===window

    call/apply 修改this指向

    add.call(0,5,7)add.apply(0,[10,20])中this指向0

    bind与this

    bind IE9及以上支持 改变this
    bind({a:3}) this指向{a:3}


    foo.name 函数名
    foo.length 形参个数
    arguments.length 实参个数

    未传参数失去绑定 foo(a,b,c) foo(1,2) arguments[2]=undefined


    原始操作符比函数调用快

    A[A.length]=v;好于A.push(v);

    var min=a<b?a:b;
    return min;
    

    不要在循环内部使用try-catch-finally

    不要对数组使用 for in

    避免使用with() with()可以把变量加入到全局作用域中

    不要使用eval() 或者函数构造器 开销较大

    JSON序列化

    对象→json JSON.stringify()

    JSON反序列化

    json→对象 JSON.parse()

    jQuery中可以临时存储整个DOM元素 ``` var navleft=document.querySelector('#left');

    逗号运算符:先计算左边的参数,再计算右边的参数,返回最右边参数的值


    通过for-in循环检查对象的属性,下面用法防止迭代的时候进入到对象的原型属性中

    for (var name in object){
        if(Object.hasOwnProperty(name)){
            //do sth
        }
    }
    

    toFixed把number四舍五入为指定小数位数的数字 num.toFixed()

    注意:toFixed()返回的是字符串不是数字

    使用length属性清空数组、截断数组

    arr.lenght=0;arr.length=4;

    不要直接从数组中delete或remove元素。直接使用delete其实并没有删除,只是将元素置为undefined。数组元素删除应使用splice.删除对象的属性可以使用delete.

    获取数组中的最大值和最小值

    var numbers=[];
    var max=Math.max.apply(Math,numbers);
    var min=Math.min.apply(Math,numbers);
    

    验证是否为数组

    function isArray(obj){
        return Object.prototype.toString.call(obj)==='[object Array]';
    }
    

    若toString()被重写过,就行不通了。

    验证是否为数字

    function isNumber(n){
        return !isNaN(parseFloat(n))&&isFinite(n);
    }
    

    对象转换为数组

    var argArray=Array.prototype.slice.call(arguments);

    能将具有length属性的对象转换为数组

    var a={length:3,0:'abc',1:'def',2:'ghi'};
    console.log(Array.prototype.slice.call(a));//['abc','def','ghi']
    
    function toArr(obj){
        var arr=[];
        for(item in obj){
            arr.push(obj[item]);
        }
        return arr;
    }
    toArr(obj);
    

    数组之间追加

    Array.prototye.push.apply(array1,array2);

    字符串去空格

    String.prototype.trim=function(){
        return this.replace(/(^s*)|(s*$)/g,"");
    }
    

    或者$.trim(str);

    只有function(){}内新声明的才能是局部变量,while{}、if{}、for{}之内的都是全局变量(除非本身包含在function内)

    函数声明优于变量声明。如果函数名和变量名相同,函数声明就能覆盖变量声明。

    给基本数据类型添加属性不报错,但取值时是undefined。

    使用push()来合并数组

    var arr1=[1,2,3],arr2=[4,5,6];
    Array.prototype.push.apply(arr1,arr2);
    arr1;
    //[1,2,3,4,5,6]
    

    闭包

    1. 定义了一个普通函数A
    2. 在A中定义了普通函数B
    3. 在A中返回B(确切的讲在A中返回B的引用)
    4. 执行A(),把A的返回结果赋值给变量C
    5. 执行C()

    经典闭包

    var lis=document.links;
    for (var i=0,length=lis.length;i<length;i++){
        (function(i){
            lis[i].onclick=function(){
                alert(i+1);
            }
        })(i);
    }
    
  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/xjuan/p/5455006.html
Copyright © 2011-2022 走看看