Other

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 === NaNfalse
  • 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
原文地址:https://www.cnblogs.com/qq3279338858/p/14312545.html