第一章 值、类型和运算符
1.1 特殊数字
在JavaScript中有三个特殊的值Infinity、-Infinity、NaN,它们虽然是数字,但看起来却跟一般的数字不一样。
Infinity、-Infinity分别表示正无穷大和负无穷大。Infinity-1的结果仍然是Infinity。
虽然NaN是数字类型的值,但我们用其表示“非数值”。比如0/0,Infinity-Infinity或者当数值运算中产生不精确或毫无意义的结果时,就用NaN表示。
console.log(typeof NaN); // number
console.log(Infinity-1); // Infinity
// NaN另一个奇怪的特性,ES6中两个NaN被认为相等
console.log(NaN===NaN); // false
console.log(Object.is(NaN,NaN)); // true
1.2 比较
+0和-0在JavaScript引擎中被表示为两个完全不同的实体,而如果使用全等运算符对两者进行比较会得到为true的结果。ES6引入Object.is()方法来弥补全等运算符的不足。
console.log(-0===-0); // true
console.log(Object.is(+0,-0)); // false
1.3 逻辑运算符
逻辑运算符的短路特性
- 当左侧可以被转换为true时,||运算符会直接返回左侧的值,否则或返回右侧的值;
- 当左侧可以被转换为false时,&&运算符会直接返回左侧的值,否则或返回右侧的值;
console.log(0||1); // 1
console.log(1&&0); // 0
1.4 自动类型转换
console.log(8*null); // 0
console.log("5"+1); // 51(string)
console.log("5"-1); // 4(number)
在相同类型的值之间使用“==”符号进行比较时,其运算结果很好预测:除了NaN这种情况,只要两个值相同就会返回true。但如果类型不同,在绝大多数情况下,JavaScipt只是将其中一个值转换成另一个值的类型。但若果运算符两边有null或者undefined,那么只有两侧均为null或者undefined中的一个结果才为true。
console.log(null==0); // false
console.log(undefined==0); // false
console.log(null==undefined); // true
网友评论