null
typeof null === 'object'
是成立的,但这是一个 bug,object 实际不在 null 的原型链上,即null instanceof Object === false
最大数值
- 在JavaScript中,2^53 是最大的值,没有比这更大的值了。所以 2^53 + 1 == 2^53,所以这个循环无法终止。
var END = Math.pow(2, 53);
var START = END - 100;
var count = 0;
for (var i = START; i <= END; i++) {
count++;
}
console.log(count);
% 取膜和数值比较
- 会保留符号,所以
-9 % 2 === -1
0 === -0
所以-8 % 2 === -0 === 0
NaN === NaN
为false
Infinity % 2
结果为NaN
arguments
- arguments 和参数之间是双向绑定的,即改变了参数值 arguments 同时改变,反之亦然
function sidEffecting(ary) {
ary[0] = ary[2];
}
function bar(a, b, c) {
c = 10;
sidEffecting(arguments);
return a + b + c;
}
bar(1, 1, 1); // 等于21
数值计算精度丢失 IEEE 754
111111111111111110000 + 1111 === 111111111111111110000
Date
- 日期转换错误时
var a = new Date("epoch");
返回一个 Date 对象,它的值是Invalid Date
var
- 一个变量在同一作用域中已经声明过,会自动移除 var 声明,但是赋值操作依旧保留
function foo(a) {
var a;
return a;
}
function bar(a) {
var a = "bye";
return a;
}
[foo("hello"), bar("hello")] // 返回 hello 和 bye