JavaScipt的坑(一)

作者: zyfEve | 来源:发表于2016-10-12 14:43 被阅读37次

    函数作用域
    js没有块级作用域

    function test(){
    var i = 0;
    if(i==0){
    var j=0;
    for(var k=0;k<10;k++){
    console.log(k) //0,1,2...9
    }
    console.log(k);//10
    }
    console.log(j);//0
    }
    test();
    

    声明提前:(变量的初始化还是在原位置)《JavaScript权威指南》P57
    P94 for循环里声明的变量也会“提前”

    var scope = "global";
    function f(){
    console.log('1 '+scope);  //1 undefined
    var scope = 'local';
    console.log('2 '+scope); //2 local
    }
    f();
    

    js所有数字都是浮点型的。P70
    5/2 = 2.5 , 0 / 0 = NaN,
    3/0 = Infinity(正无穷大,不报错)-1/0 = -Infinity(负无穷大,不报错)
    6.5%2.1 = 0.2(%求余运算也适用于浮点数,经检验结果是0.19999999999999973)

    null和undefined

    undefined==null  //true
    undefined==undefined   //true
    null == null  //true
    NaN ==NaN   //false
    null == undefined   //true
    null === undefined   //false
    typeof null  //"object"
    typeof undefined   //"undefined"
    

    P71

    true+true//2 布尔值转化为数字
    1+{}   //"1[object Object]"  对象转化为字符串后进行字符串连接
    2+null  //2  null转化为0进行加法
    1+NaN  //NaN
    2+undefined  //NaN  undefined转为NaN进行加法
    1+2+"nice"  //"3nice"
    1+(2+"nice")  //"12nice"
    
    yunsuan.png

    "++"从不做字符串连接操作P72

    x="1";x+1  //"11"
    x="1";x++  //1
    x  //2
    x="1";++x //2
    

    恒等运算符===

    var s="s";var t=new String("s");
    s==t;   //true
    s===t;  //false
    

    闭包(课外)

    function count() {
        var arr = [];
        for (var i=1; i<=3; i++) {
            arr.push(function () {
                return i * i;
            });
        }
        return arr;
    }
    
    var results = count();
    var f1 = results[0];
    var f2 = results[1];
    var f3 = results[2];
    f1();//16
    f2();//16
    f3();//16
    

    检测一个对象是否是另一个对象的原型(或者在原型链中),使用isPrototypeOf()方法。(P139)
    例:p.isPrototypeOf(q); //检测p是否是q的原型

    数组
    1.js数组可能是稀疏的,数组元素的索引不一定要连续的,它们之间可以有空缺。
    2.如果数组是稀疏的,length属性值大于元素个数,即包含稀疏元素。
    3.数组直接量的语法允许有可选的结尾的逗号。例:
    var arr=[,,];//数组只有2个元素(不是3个,缺省值),都是undefined,且这不是稀疏数组。P147
    4.将数组的length设置为一个比当前长度小的非负整数n,则删除大于或等于n的索引的元素。例:a.length=0;//删除数组a的所有元素
    .将数组的length设置为一个比当前长度大的非负整数n,实际上不会向数组添加新的元素,而在数组尾部创建一个空的区域。
    5.for/in循环能够枚举继承的属性名。数组遍历不建议使用这样的遍历方式。
    6.forEach遍历数组:P151
    arr.forEach(function(x){
    alert(x);
    })
    7.数组元素拼接:arr.join(); P152
    将数组中的所有元素都转换成字符串并拼接起来,返回最后生成的字符串。可指定一个字符串在生成字符串时分隔各个元素。若不指定,则默认使用逗号分隔。
    var a=[1,2,3];
    a.join(); //"1,2,3"
    a.join(" ");//"1 2 3"
    String.split()是将字符串分割成若干部分来组成数组。
    8.数组反转:arr.reverse(); P152
    将数组中的元素颠倒顺序,返回逆序的数组。
    var a=[1,2,3];
    a.reverse();//a=[3,2,1];
    9.数组排序:arr.sort(); P152
    如果数组包含undefined,则被排到最后。
    var a=[2,1,4];
    a.sort(); //a=[1, 2, 4]
    10.拼接数组:arr.concat();
    var a=[1,2];
    a.concat(3,4);//a=[1,2,3,4]
    11.arr.slice();返回数组的一个片段或者子数组(不修改调用的数组)。
    var a=[1,2,3,4,5];
    a.slice(0,3);//[1,2,3]
    a.slice(3);//[4,5] 返回下标为3至数组结束的子数组。
    a.slice(1,-1);//[2,3,4] -1表示数组最后一个元素的前一个,返回下标为1至倒数第二个元素。
    a.slice(-3,-2);//[3]
    12.splice() 在数组中插入或删除元素(修改调用的数组)P154
    13.unshift()和shift()
    unshift():在数组的头部添加一个或多个元素,并将已存在的元素移动到更高的索引来获取足够的空间,并返回数组新的长度。
    shift():删除数组的第一个元素并将其返回,然后把所有随后的元素下移一个位置连填补数组头部的空缺。
    var a=[];
    a.unshift(1);//a = [1],返回1(长度)
    a.unshift(2,[3,4]);//a=[1,2,[3,4]],返回3(长度)
    a.shift(); //a=[2,[3,4]],返回1(删除的元素)

    相关文章

      网友评论

        本文标题:JavaScipt的坑(一)

        本文链接:https://www.haomeiwen.com/subject/izyrdttx.html