美文网首页
【js高程第3章】— 基本概念

【js高程第3章】— 基本概念

作者: 南慕瑶 | 来源:发表于2018-02-27 20:51 被阅读0次

    一、杂项

    1.严格模式下,eval和arguments不能作为标识符或属性名

    2.5种简单数据类型:Undefined、Null、Boolean、Number、String。1种复杂数据类型:Object

    3.typeof可能返回6种结果,注意两种返回结果:

    "object":对象或null

    "function":函数

    4.对象变量初始化,用null

    二、Number类型:

    1.非严格模式下:0开头代表8进制,如果0之后的数字超出了8进制的范围,则忽略前导0,按照10进制解析。如:079 --> 解析为79。

    2.浮点数:最高精度17位小数。注意,0.1+0.2 === 0.30000000000000004 (15个0),0.1+0.2 !== 0.3。

    3.NaN:isNaN()在接收到一个值之后,会尝试将这个值转换为数值,如果转换失败,则判定为NaN。

    4.Number():Number(null) === 0,Number(undefined) === NaN,Number("0xf") === 15。

    5.parseInt():转换时,根据字符串前导0或0x判断按照几进制来转换。

                        eg:parseInt("070");//56(8进制)

                        第二个参数:指定按照几进制识别。

                        eg:parseInt("AF",16);//175 (可以不带0x)

    6.parseFloat():与parseInt()的区别 —— 转换时,第一个小数点有效,始终忽略前导0,只解析十进制值。

    三、String类型:

    1.toString():null、undefined没有toString()方法。通常不必传参数。但,调用数值的toString()方法时,可以传递一个参数,指明按照几进制解析当前数值,并输出为字符串形式。

                      eg:let num = 10; 

                             num.toString();//"10"

                             num.toString(2);//"1010"

                             num.toString(8);//"12"

    2.String():String(null);//"null";String(undefined);//"undefined";有toString()方法的值,使用String()转换,默认调用toString()方法。

    四、操作符:

    1.一元加+:对非数值使用时,等同于Number()的转换规则。

    2.按位非:本质 —— 操作数的负数减1。num2 = -num1 - 1相当于num2 = ~num1,按位非速度更快。

    3.左移右移:

    左移:<<     有符号右移(首位符号位不动,移其他位):>>    无符号右移(所有位一起右移):>>>

    4.相等和不相等(==):

    规则:(1)如果有一个操作数是布尔值,先将其转换为数值。

                    eg:false == "false"; //false。false转为数值为0,0和"false"不等。

                         false == "0";//true

               (2)如果一个操作数是对象,另一个不是,则调用对象的valueOf方法,得到基本类型后再进行比较。

               (3)如果两个操作数都是对象,则比较它们是不是同一个对象。两个操作数指向同一个对象,则相等。

               (4)null == undefined

               (5)比较相等性之前,不能将null和undefined转换成其他任何值。所以,null != 0,undefined != 0。

    五、语句:

    1.for-in:遍历对象所有可枚举的属性,包括原型属性。输出的属性名顺序不可预测,可能因浏览器而异。

                建议在使用for-in前,先确认遍历对象的值不是null或undefined。

    2.label语句(与break和continue配合使用):

    形如:start:for(var i=0;i<count;i++){

                    alert(i);

               }

    start为for这个循环的名称,用于指代当前这个for循环。

    3.break和continue

    区别:break立即退出循环。continue强制继续执行循环,continue之后的语句会被忽略,继续走for循环的下一个值。

    eg:

    break + label

    var num = 0;

    outermost:

    for(var i=0;i<10;i++){

        for(var j=0;j<10;j++){

            if(i==5 && j==5){

                break outermost; //退出outermost这个循环。即,退出内部外部两个for语句

            }

            num++;

        }

    }

    alert(num); //55

    continue + label

    var num = 0;

    outermost:

    for(var i=0;i<10;i++){   

        for(var j=0;j<10;j++){       

            if(i==5 && j==5){           

                //继续outermost这个循环。i==5 && j==5时,num++不走,直接继续走外部循环

                continue outermost; 

            }           

            num++;   

        }    

    }

    alert(num); //95

    4.with语句(开发大型应用程序时,不建议使用):

    with(location){ //对location对象进行设定

        var qs = search.substring(1); //相当于var qs = location.search.substring(1); 

        var hostName = hostname;  

        var url = href;

    }

    5.switch语句:

    对比值时,使用的是全等(===)操作符。

    合并两种情形:

    switch(i){

        case 25:

            /*合并两种情形*/

        case 35:

            alert("25 or 35");

            break;

        case 45:

            alert("45");

            break;

    }


    六、函数(没有重载,可通过传入参数个数,即arguments的长度,模仿重载)

    1.严格模式对函数的限制:

    不能把函数命名为eval或arguments

    不能把参数命名为eval或arguments

    不能出现两个参数同名的情况

    2.关于arguments的特性,需要注意一点:

    function doAdd(num1,num2){

     /*严格模式下,如果调用时只传一个参数,num2仍然为undefined,且重写arguments的值会导致语法错误(代码将不会执行)*/

        arguments[1] = 10;

        alert(arguments[0] + num2); //得到num1 + 10的结果

    }

    如上:

    手动修改了arguments[1]的值,num2的值也会同步改变。但注意,它们的内存空间是独立的,只是值会同步。

    如果只传入了一个参数,那么arguments[1]的值不会反应到命名参数(即num2)中。

    doAdd(2); //NaN(num2 === undefined)

    相关文章

      网友评论

          本文标题:【js高程第3章】— 基本概念

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