摘要:因为是弱类型语言,所以它会在任何可能的情形下对变量进行强制类型转换。内置类型的构造函数调用内置类型的构造函数时,是否使用关键字将表现得大不相同。传递字面值或非对象值也会造成强制类型转换的现象。最好的方法就是显示地将值转换为,或三种类型之一。
因为 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 三种类型之一。
"" + 10 === "10"; // true
通过与一个空字符串相加可以很容易转换为字符串类型。
转换为数字 Number+"10" === 10; // true
使用一个加号就可以将值转换为数字类型。
转换为布尔值 Boolean转换为数字的应用可以参考这个提问:
http://segmentfault.com/q/1010000000476683
使用两次 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 是弱类型语言。这就意味着相等符号为了比较两个值将会强制转换类型。 ...
因为最近有博友反馈我的博文是直接翻译的参考链接内的内容,所以我在这里要说明一下,以免引起不必要的误会。 首先,我很喜欢 segmentfault 的交流和学习的氛围,所以我很愿意在这里跟各位 SFer 交流学习心得,相互学习,共同进步。 第二,我做技术方面的工作不久,所以学习经历也不是很长,但是我发现写博客,总结自己的学习心得是个很好的学习习惯,至少对于我个人而言,我于此收益颇丰,所以我决定坚持一...
摘要:并没有类继承模型,而是使用原型对象进行原型式继承。我们举例说明原型链查找机制当访问一个对象的属性时,会从对象本身开始往上遍历整个原型链,直到找到对应属性为止。原始类型有以下五种型。此外,试图查找一个不存在属性时将会遍历整个原型链。 Javascript 并没有类继承模型,而是使用原型对象 prototype 进行原型式继承。 尽管人们经常将此看做是 Javascript 的一个缺点,然...
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
阅读 2952·2021-11-23 09:51
阅读 1006·2021-09-26 09:55
阅读 3934·2021-09-22 14:58
阅读 1467·2021-09-08 09:35
阅读 1078·2021-08-26 14:16
阅读 881·2019-08-23 18:17
阅读 2053·2019-08-23 16:45
阅读 700·2019-08-23 15:55