因为 Javascript
是弱类型语言,所以它会在任何可能的情形下对变量进行强制类型转换。
// These are true
new Number(10) == 10; // Number.toString() is converted
// back to a number
10 == '10'; // Strings gets converted to Number
10 == '+10 '; // More string madness
10 == '010'; // And more
isNaN(null) == false; // null converts to 0
// which of course is not NaN
// These are false
10 == 010;
10 == '-10';
为了避免以上例子中的问题,十分建议使用严格相等符号 ==
=。虽然这个方法可以解决大部分普遍的问题,但是由于 Javascript
的弱类型原因,还是会造成许多其他的问题。
内置类型的构造函数 Constructor
调用内置类型的构造函数时,是否使用关键字 new
将表现得大不相同。
new Number(10) === 10; // False, Object and Number
Number(10) === 10; // True, Number and Number
new Number(10) + 0 === 10; // True, due to implicit conversion
使用 new
将创造一个新的 Number
对象,而不使用 new
,则表现得更像是一个转换器。
传递字面值或非对象值也会造成强制类型转换的现象。
最好的方法就是显示地将值转换为 String
,Number
或 Boolean
三种类型之一。
转换为字符串 String
'' + 10 === '10'; // true
通过与一个空字符串相加可以很容易转换为字符串类型。
转换为数字 Number
+'10' === 10; // true
使用一个加号就可以将值转换为数字类型。
转换为数字的应用可以参考这个提问:
http://segmentfault.com/q/1010000000476683
转换为布尔值 Boolean
使用两次 not
操作符,可以将一个值转换为布尔值。
!!'foo'; // true
!!''; // false
!!'0'; // true
!!'1'; // true
!!'-1' // true
!!{}; // true
!!true; // true
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。