作家
登录

JavaScript 更严格的相等 [译]

作者: 来源:www.28hudong.com 2013-03-30 00:22:31 阅读 我要评论

1.检测NaN 在数学上,任意值x总是与自己相等: x = x 但这条规则并不适用于 === 和 NaN: 复制代码 代码如下: > NaN === NaN false 导致的结果就是,你不能通过使用indexOf方法在一个包含了NaN的数组中找到这个NaN,因为该方法在内部是使用了===来判断一个元素是否和参数中指定的值相等的: 复制代码 代码如下: > [ NaN ].indexOf(NaN) -1 译者注:switch语句同理 复制代码 代码如下: switch (NaN) { case NaN:alert(NaN); } 如果你不能使用 === 来检测NaN,那该使用什么呢?有一个全局函数isNaN(),但这个函数有个问题,就是它总会隐式的将参数中的值转换成数字再做判断,这样就在判断很多明显不是NaN的值的时候也返回了true: 复制代码 代码如下: > isNaN("foo") true 解释:"foo"被转换成了数字NaN. 复制代码 代码如下: > Number("foo") NaN 另外一个检测NaN的方法就是利用NaN是唯一一个与自身严格不相等的值: 复制代码 代码如下: function myIsNaN(value) { return value !== value; } 另外一个更易懂的方法是在使用isNaN()之前先检查一下这个值是不是数字类型.这样就避免了隐式转换的问题. 复制代码 代码如下: function myIsNaN2(value) { return typeof value === 'number' && isNaN(value); } ECMAScript.next中将会有一个新的Number.isNaN()方法,它是一个修正版的isNaN()函数. 2.区分-0和+0 这样的需求很少见,但有时候你的确需要区分+0(正零)和-0(负零),在JavaScript中,这是两个不同的值.但===不能判断出来: 复制代码 代码如下: > -0 === +0 true 那到底该怎么来区分呢?在JavaScript中.如果让一个正数除以−0,结果是-Infinity.如果除以+0,则结果是Infinity.这两个无穷大值是可以使用===来判断的: 复制代码 代码如下: > 1 / -0 -Infinity > 1 / +0 Infinity > Infinity === -Infinity false 译者注:写成函数就是 复制代码 代码如下: function isPositiveZero(zero){ return 1/zero === Infinity } function isNegativeZero(zero){ return 1/zero === -Infinity } 3.ECMAScript.next中更严格的相等:“is”操作符 ECMAScript.next会有一个 “is” 操作符,它的作用就是"更严格的相等”:它能把NaN看作等于自身,还能区分开-0和+0.还有一个相反的操作符称为“isnt”.例如:复制代码 代码如下: > NaN is NaN true > -0 isnt +0 true 目前这个操作符可以由Object.is()方法来弥补.这个方法可以这样实现:复制代码 代码如下: Object.is = function(x, y) { if (x === y) { // x === 0 => 比较+0和-0 return x !== 0 || (1/x === 1/y); } // x !== y => 只有在x和y都是NaN时才返回true return x !== x && y !== y; }; 3.1 尝试Object.is() 如果你想尝试一下Object.is(),你可以使用es6-shim,它可以将ECMAScript.next(ECMAScript 6)中的一些特性移植到ECMAScript 5中. 译者注:如果想在ES3的环境上使用,则还得使用es5-shim4.参考 Equality in JavaScript: === versus == ECMAScript.next: the “TXJS” update by Eich NaN and Infinity in JavaScript es6-shim – ECMAScript 6 functionality on ECMAScript 5

  推荐阅读

  javascript动画对象支持加速、减速、缓入、缓出的实现代码

调用接口: 复制代码 代码如下: /** * @param elem {HTMLElement} 执行动画的HTML元素 * @param params {JSON} 动画执行过过程中需要修改的HTML属性 * @param duration {Number} 可选,动画执行时间,单位毫秒 * @>>>详细阅读


本文标题:JavaScript 更严格的相等 [译]

地址:http://www.17bianji.com/kaifa2/JS/23058.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)