介绍
下半部分主要介绍了JavaScript的操作符,语句和函数。其中大多数熟练掌握的内容将不再展开赘述,主要回顾一些JavaScript特有的,以及之前并不熟悉的内容。
操作符(Operator)
一元操作符(Unary Operators)
- ++/–
- 操作数可以是数字,string,boolean或者object,操作后的数据类型是Number。
- 可以转换为数字的string,先转化再+1或-1,不可以转换的,返回NaN。
- boolean先转换为0或1,然后进行加减计算。
- object先调用valueOf()方法,如果是NaN再调用toString()方法,再进行计算。
- 操作数可以是数字,string,boolean或者object,操作后的数据类型是Number。
- +/-
- 如果应用在非数字的操作数上,使用和Number()方法一样的方法先进行转化再计算。
位操作符(Bitwise Operators)
- 基本原理
- 利用IEEE-754的64位二进制格式存储,但计算时整数是以32位计算之后再以64位存储。
- 负数以二进制补码的形势存储,求绝对值的二进制码,取反,加1。
- 按位非(~)
- 按位与(&)
- 按位或(|)
- 按位亦或(^)
- 左移(<<)
- 有符号右移(>>,左边补符号位的数值)
- 无符号右移(>>>,左边补0)
布尔操作符(Boolean Operators)
逻辑非(!,计算结果是Boolean值)
1
2
3
4
5
6
7alert(!false) //true
alert(!"blue") //false
alert(!0) //true
alert(!NaN) //true
alert(!"") //true
alert(!null) //true
alert(!"123") //false逻辑与(&&,返回的是第一个或者第二个操作数的值)
1
2alert(null && 3) // null
alert(1 && 3) // 3逻辑非(||,返回的是第一个或者第二个操作数的值)
1
2
3alert(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
3alert(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
8var object = {
prop1: 1,
prop2: 2
};
with (object) {
var p1 = prop1; //1
var p2 = prop2; //2
}
switch语句
函数
- ECMAScript里面的函数的参数时是以数组
arguments
的形式表示的。所以不管在定义函数时有一个命名的参数,调用时都可以传递少于,等于或多于其个数的参数。 arguments的长度是实际调用时传递的参数的个数。可以通过改变arguments的值来改变命名参数的值,但是反之不适用。
1
2
3
4
5function add(num1, num2) {
arguments[1] = 10;
return num1 + num2;
}
add(1,2); //return 11在严格模式下,不能修改arguments的值(syntax error),并且不能通过修改arguments的值改变num2的值。
- 函数不能被重载,如果有多个函数重名,在代码最后面出现的得到函数名。
- 函数都是值传递,没有地址传递。