JavaScript种类变换总结

JavaScript 是弱种类語言,因此会在一切将会的状况下运用强制性种类变换。
// 下边的较为結果是:true
new Number(10) == 10; // Number.toString() 回到的标识符串被再度变换为数据

10 == 10   // 标识符串被变换为数据
10 == +10   // 跟上面一样
10 == 010   // 跟上面一样
isNaN(null) == false; // null 被变换为数据 0
  // 0 自然并不是一个 NaN(译者注:否认之否认)

// 下边的较为結果是:false
10 == 010;
10 == -10
  ES5 提醒: 以 0 开始的数据字面上值会被做为八进制数据分析。
  而在 ECMAScript 5 严苛方式下,这一特点被清除了。
以便防止上边繁杂的强制性种类变换,明显强烈推荐应用严苛的相当于实际操作符。
尽管这能够防止大部分分的难题,但 JavaScript 的弱种类系统软件依然会造成一些其他难题。
内嵌种类的结构涵数
内嵌种类(例如 Number 和 String)的结构涵数在被启用时,应用或是不应用 new 的結果彻底不一样。

new Number(10) === 10;  // False, 目标与数据的较为
Number(10) === 10;  // True, 数据与数据的较为
new Number(10) + 0 === 10; // True, 因为隐式的种类变换

应用内嵌种类 Number 做为结构涵数可能建立一个新的 Number 目标,
而不在应用 new 重要字的 Number 涵数更好像一数量字变换器。

此外,在较为中引进目标的字面上值可能造成更为繁杂的强制性种类变换。
最好的挑选是把要较为的值显式的变换为三种将会的种类之一。
变换为标识符串
+ 10 === 10 // true

将一个值再加空标识符串能够轻轻松松变换为标识符串种类。
变换为数据
+ 10 === 10; // true

应用一元的加号实际操作符,能够把标识符串变换为数据。
标识符串变换为数据的常见方式:
+ 010 === 10
Number( 010 ) === 10
parseInt( 010 , 10) === 10  // 用于变换为整数金额

+ 010.2 === 10.2
Number( 010.2 ) === 10.2
parseInt( 010.2 , 10) === 10

变换为布尔运算型
根据应用 否 实际操作符2次,能够把一个值变换为布尔运算型。
!! foo   // true
!!   // false
!! 0   // true
!! 1   // true
!! -1   // true
!!{};  // true
!!true;  // true 



扫描二维码分享到微信