<<JavaScript 高级程序设计>> 读书笔记 - 第三章: 基本概念

第三章 - 基本概念

操作符

摘要: 各种操作符的概念与技巧

  • number() 方法可将变量转换为 number 类型, 但是 number(undefined) 结果为 NaN

  • '+' 一元操作符, 同 number() 方法一样 (包括对象里 valueOf() 或 toString()) , 可将变量强制转换为number 类型. ^^page: 38

  • 逻辑与操作中 (&&) , 如果有一个操作数不是布尔值, 则会在满足条件 (满足逻辑与的条件, 即第一个操作数必须为 true) 后返回第二个对象, **一般会在回调函数里使用: **callback && callback(), 逻辑或同理. ^^page: 45

  • 逻辑与、逻辑或操作都属于短路操作, 即满足第一个操作就不会再去判断第二个操作, 如: (false && undefined)后面的undefined不会去判断, 也就不会出错 (逻辑与、逻辑或不能判断未声明的变量) . ^^page: 45&46

  • 加法操作需要注意字符串与数值相加的时候, 数值被转换为字符串, 如:

    console.log('233'+3+3) // '23333'
    console.log('233'+(3+3)) // '2336'
    

    ^^page: 48

  • 关系操作符中当字符串比较时, 会将第一个字符转换成字符编码在作对比, 且一 一对比下去, 直到对比出结果. 如:

    var result = '23' < '3' // true, 因为'2'的编码小于'3'的编码
    var res = '23' > 3 // true, 因为'23'会转换为数字23再与3比较
    

    数值与字符串对比时, 字符串转换成数值, 如果转换失败则是 NaN (任何比较结果都为 false) .

    注: 字符串必须全部是数字, 否则值都为 NaN. ^^page: 50

  • 相等操作中特殊值NaN、null、undefined的特别说明:

    NaN == NaN // false
    null == undefined // true
    null === undefined // false, 类型不同
    

    ^^page: 52

  • 使用复合赋值操作符 (如: +=, -=等) 只是简化操作, 不会带来任何性能的提升. ^^page: 54

  • 逗号操作符用于赋值时, 逗号操作符总会返回表达式中的最后一项, 如:

    var num = (5,1,4,8,0) // num = 0
    

    ^^page: 54

语句

摘要: 语句基础

  • for-in 用于枚举对象的属性, 语法:

    for (var property in expression) { // 建议在控制语句加入 var , 保证其作为局部变量
      // statement
    }
    

    通过 for-in 循环的属性名顺序是不可预测的. 如果迭代对象的变量值为 null 或 undefined 时, for-in 不会执行循环体, 也不会报错. ^^page: 57

  • label 标签表示外部的 for 语句, 作用是在嵌套循环中结束外部循环或者跳过本次外部循环, 如:

    outfor: //定义label标签, 名字为outfor
    for(var i = 0; i < 10; i++) {
        for(var j = 0; j < 10; j++){
            if(i == 5 && j == 5){
                break outfor //标签outfor代表最外层循环, 此时退出的是整个循环
            }
        }
    }
    

    ^^page: 59 && https://www.jb51.net/article/100027.htm

  • switch语句与其他语言的不同点在于js中switch语句可以使用任何数据类型, 注: switch语句在比较时是全等操作符, 不会发生类型转换. ^^page: 62

函数

摘要: 函数基本语法

  • 函数基本语法:

    function functionName (arg0, arg1) {
      // statement
    }
    

    函数使用return返回值, 会停止函数, 如果不带返回值, 则函数停止后返回undefined, 一般会在提前停止函数且不需要返回值时使用. ^^page: 63

  • 函数不限制参数 (类型和数量). 参数是由 arguments 对象访问. arguments[0] 代表第一个参数, 以此类推.声明函数时,参数个数已经确定, 所以实参多于声明时参数个数时, 函数无法拿到多出来的实参值. 相反, 如果实参少于声明时参数的个数, 可以通过 arguments 对象访问到该实参值.

  • 由于函数的参数特性, 函数不能实现重载, 只能判断传入参数的类型和数量不同来实现类似重载的功能, 如:

    // 累加功能
    function doAdd () {
      var i = argument.length - 1
      var num = arguments[0]
      while (i > 0) {
        num += arguments[i]
        i--
      }
      return num
    }
    doAdd(5, 10, 15, 20) // 50
    
posted @ 2019-01-04 11:14  xvvx  阅读(135)  评论(0)    收藏  举报