《JavaScript高级程序设计》第三章笔记 - 操作符&语句

介绍

下半部分主要介绍了JavaScript的操作符,语句和函数。其中大多数熟练掌握的内容将不再展开赘述,主要回顾一些JavaScript特有的,以及之前并不熟悉的内容。

操作符(Operator)

一元操作符(Unary Operators)

  • ++/–
    • 操作数可以是数字,string,boolean或者object,操作后的数据类型是Number。
      • 可以转换为数字的string,先转化再+1或-1,不可以转换的,返回NaN。
      • boolean先转换为0或1,然后进行加减计算。
      • object先调用valueOf()方法,如果是NaN再调用toString()方法,再进行计算。
  • +/-
    • 如果应用在非数字的操作数上,使用和Number()方法一样的方法先进行转化再计算。

位操作符(Bitwise Operators)

  • 基本原理
    • 利用IEEE-754的64位二进制格式存储,但计算时整数是以32位计算之后再以64位存储。
    • 负数以二进制补码的形势存储,求绝对值的二进制码,取反,加1。
  • 按位非(~)
  • 按位与(&)
  • 按位或(|)
  • 按位亦或(^)
  • 左移(<<)
  • 有符号右移(>>,左边补符号位的数值)
  • 无符号右移(>>>,左边补0)

布尔操作符(Boolean Operators)

  • 逻辑非(!,计算结果是Boolean值)

    1
    2
    3
    4
    5
    6
    7
    alert(!false) //true
    alert(!"blue") //false
    alert(!0) //true
    alert(!NaN) //true
    alert(!"") //true
    alert(!null) //true
    alert(!"123") //false
  • 逻辑与(&&,返回的是第一个或者第二个操作数的值)

    1
    2
    alert(null && 3) // null
    alert(1 && 3) // 3
  • 逻辑非(||,返回的是第一个或者第二个操作数的值)

    1
    2
    3
    alert(null || 3) //3
    alert(1 || 3) //1
    alert(null || NaN) //NaN

乘性操作符(Multiplicative Operators)& 加性操作符(Additive Operators)

  • Infinity * 0 = NaN
  • Infinity / Infinity = NaN
  • Infinity % Infinity = NaN
  • Infinity + -Infinity = NaN
  • Infinity - Infinity = NaN
  • -Infinity - -Infinity = NaN

关系操作符

相等操作符

  • 类型转换
    • Boolean和字符串会被转换成数字。
    • Object调用valueOf()函数。
  • 全等和不全等
    • 全等是在不转换类型的情况下相等。
    • 不全等是转换类型之前或之后相等即可。
      1
      2
      3
      alert(1 == true) //true
      alert("1" == true) //true
      alert(1 === true) //false

赋值操作符

逗号操作符

语句

if语句

do-while语句

while语句

for语句

  • ECMAScript中没有块级作用域,所以for语句中定义的变量在for语句之外也可以使用。

    for-in语句

  • 用于迭代object中的属性。没有顺序之分。
    1
    for (var propName in window) {}

label语句

break和continue语句

with语句

  • 将代码的作用域控制在一个特定的对象中。
    1
    2
    3
    4
    5
    6
    7
    8
    var object = {
    prop1: 1,
    prop2: 2
    };
    with (object) {
    var p1 = prop1; //1
    var p2 = prop2; //2
    }

switch语句

函数

  • ECMAScript里面的函数的参数时是以数组arguments的形式表示的。所以不管在定义函数时有一个命名的参数,调用时都可以传递少于,等于或多于其个数的参数。
  • arguments的长度是实际调用时传递的参数的个数。可以通过改变arguments的值来改变命名参数的值,但是反之不适用。

    1
    2
    3
    4
    5
    function add(num1, num2) {
    arguments[1] = 10;
    return num1 + num2;
    }
    add(1,2); //return 11
  • 在严格模式下,不能修改arguments的值(syntax error),并且不能通过修改arguments的值改变num2的值。

  • 函数不能被重载,如果有多个函数重名,在代码最后面出现的得到函数名。
  • 函数都是值传递,没有地址传递。