资讯专栏INFORMATION COLUMN

细说 Javascript 类型篇(四) : 类型转换

chengtao1633 / 3405人阅读

摘要:因为是弱类型语言,所以它会在任何可能的情形下对变量进行强制类型转换。内置类型的构造函数调用内置类型的构造函数时,是否使用关键字将表现得大不相同。传递字面值或非对象值也会造成强制类型转换的现象。最好的方法就是显示地将值转换为,或三种类型之一。

因为 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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78098.html

相关文章

  • 细说 Javascript 类型(一) : 相等和比较

    摘要:由于中复杂的类型转换机制,将会使得由此产生的错误变得难以追踪。此外,类型的强制转换会对性能也造成一定的影响,例如,当一个字符串与数字进行比较时,会被强制转换为数字。详解一下中的比较参考 Javascript 有两种方法来判断两种值是否相等。 相等符号 相等符号由两个等号组成: ==Javascript 是弱类型语言。这就意味着相等符号为了比较两个值将会强制转换类型。 ...

    wthee 评论0 收藏0
  • 细说 Javascript 函数) : arguments 对象

    因为最近有博友反馈我的博文是直接翻译的参考链接内的内容,所以我在这里要说明一下,以免引起不必要的误会。 首先,我很喜欢 segmentfault 的交流和学习的氛围,所以我很愿意在这里跟各位 SFer 交流学习心得,相互学习,共同进步。 第二,我做技术方面的工作不久,所以学习经历也不是很长,但是我发现写博客,总结自己的学习心得是个很好的学习习惯,至少对于我个人而言,我于此收益颇丰,所以我决定坚持一...

    aristark 评论0 收藏0
  • 细说 Javascript 对象(二) : 原型对象

    摘要:并没有类继承模型,而是使用原型对象进行原型式继承。我们举例说明原型链查找机制当访问一个对象的属性时,会从对象本身开始往上遍历整个原型链,直到找到对应属性为止。原始类型有以下五种型。此外,试图查找一个不存在属性时将会遍历整个原型链。 Javascript 并没有类继承模型,而是使用原型对象 prototype 进行原型式继承。 尽管人们经常将此看做是 Javascript 的一个缺点,然...

    lansheng228 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<