细说 Javascript 范例篇(四) : 范例转换

因为 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,则表现得更像是一个转换器。

通报字面值或非对象值也会形成强迫范例转换的征象。
最好的要领就是显现地将值转换为 StringNumberBoolean 三种范例之一。

转换为字符串 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://bonsaiden.github.io/JavaScript-Garden/#types.casting

    原文作者:StephenLee
    原文地址: https://segmentfault.com/a/1190000000510320
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞