SameValue确实应该是最快的,因为就是字节比较。(理论上NaN可以有许多种字节表示,不过应该会被归一化为同一个表示。)
而 === / !== 的设计,我想主要是从程序员的方便出发。如果+0 !== -0,恐怕是违背大多数人的直觉的。比如Math.round(-0.1) === 0返回false会让人看不懂。 还有你提到的这个检测-0的方法,在这篇blog中已经有提到:http://www.wirfs-brock.com/allen/posts/128 当然原本的 x === 0 && 1/x === -Infinity 或许是更简单的测试方法。 2011/12/21 Kang-Hao (Kenny) Lu <[email protected]> > �L之石在 ECMAScript5 ����中看到了一��很像 '===' 用的演算法 ― > SameValue[1],但是它跟 '===' 的不同��在於: > > * SameValue(NaN, NaN) → true > * SameValue(+0, -0) → false > * SameValue(-0, +0) → false > > (跟 '===' 相反) > > [1] http://www.w3.org/html/ig/zh/wiki/ES5#samevalue > > 我研究了一下,�l�F�@���Y果可以用下面�@��方式����: > > (function(){ > 'use strict'; > var x = {data: +0}; > Object.freeze(x); > Object.defineProperty(x, "data", {value: -0}); > })() // ���e。����都 NaN �t不��。 > > ����解��可以�⒖� [[DefineOwnProperty]] 的演算法[2],特�e是 10.a.ii。我/ > 猜/有可能可以不靠 'use strict' 跟 Object.defineProperty 做出�@�N����,可 > 能要看看 [[DefineOwnProperty]] 的回�髦涤迷谑颤N比�^�[晦的地方(arguments > 之��的),不�^不�^�m研究了。�� test262[3] 比�^熟了人可以去�e面找找看。 > > [2] http://es5.github.com/#x8.12.9 > [3] http://test262.ecmascript.org/ > > ���f回�恚�SameValue(+0, -0) 是 false 的原因����跟浮�c�档��炔���作有�P > 吧,所以 SameValue ����是最快的。我的���}是,NaN !== NaN 我大概可以理 > 解,-0 === 0 的理由是什�N呢? > > (在 HTML5 ����翻�g群最近���U不少��������的,��一�c分享到�@��公�_�]件群 > �怼I����Y拜������了一���Y拜的 AppCache。基本上群�e的人都可以����可以公 > �_,不�^不太清楚 QQ 群的技�g�C器人要怎�N搞?��有,有�]有�`反 QQ 的使用�l > 例啊?不然的��,我一直是�X得 WHATWG IRC �l道的�o��[4]���U好用的。) > > [4] http://krijnhoetmer.nl/irc-logs/ > > > 此致 > > Kenny > >
