使用“new”关键字来构造任何东西

如果你自写构造函数并且忘记了new关键字,那么悲剧就发生了:

	var Car = function(colour) {
    this.colour = colour;
};
 
var aCar = new Car("blue");
console.log(aCar.colour); // "blue"
 
var bCar = Car("blue");
console.log(bCar.colour); // error
console.log(window.colour); //"blue"

使用new关键字调用函数会创建一个新的对象,然后调用新对象上下文中的函数,最后再返回该对象。相反的,如果不使用new关键在调用函数,那它将会变成一个全局对象。

偶然忘记使用new关键字意味着很多可选择的对象构造模式已经出现可以完全删除使用这个关键字的需求的情况,尽管这超出了本文的范围,但我还是建议你去进一步阅读

没有Integer类型

数值计算是相对缓慢的,因为没有Integer类型。只有Number类型 - Number是IEEE标准中双精度浮点运算(64位)类型。这就意味着Number会引起下面的精度舍入错误:

	0.1 + 0.2 === 0.3 //false

因为integers和floats没有区别,不像C#和JAVA下面代码是true:

	0.0 === 0; //true

最后是一个关于Number的疑问,我们该如何实现下面的问题:

	a === b; //true
1/a === 1/b; //false

答案是按照Number的规范是允许出现+0和-0的,+0等于-0,但是正无穷大不等于负无穷大,代码如下:

	var a = 0 * 1; // 这个结果为0
var b = 0 * -1; // 这个结果为-0 (你也可以直接"b=-0",但是你为何要这样做?)
a === b; //true: 0等于-0
1/a === 1/b; //false: 正无穷大不等于负无穷大