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);
    }
    
  • 相关阅读:
    本地Grails配置与MyEclipse配置
    Linux下Apache James 邮件安装与发送程序
    MyEclipse8.6 安装groovy插件
    系统管理指南:基本管理 第21 章• 使用Sun PatchManager 管理Solaris 修补程序(任务)
    tar.bz2 解压命令。
    系统管理指南:基本管理 索引
    系统管理指南:基本管理 第22 章• 使用patchadd 命令管理Solaris 修补程序(任务)~附录A • SMF 服务
    如何安装gcc
    系统管理指南:基本管理 第20 章• 管理Solaris 修补程序和更新(概述)
    系统管理指南:基本管理 第18 章• 用Solaris 系统管理工具管理软件(任务)
  • 原文地址:https://www.cnblogs.com/xjuan/p/5455006.html
Copyright © 2011-2022 走看看