- From: Kang-Hao (Kenny) Lu <kennyluck@w3.org>
- Date: Wed, 21 Dec 2011 17:34:03 +0800
- To: W3C HTML5 中文興趣小組 <public-html-ig-zh@w3.org>
- CC: 风之石 <dh20156@gmail.com>
風之石在 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
我研究了一下,發現這個結果可以用下面這個方式實驗:
(function(){
'use strict';
var x = {data: +0};
Object.freeze(x);
Object.defineProperty(x, "data", {value: -0});
})() // 拋錯。兩個都 NaN 則不拋。
詳細解釋可以參考 [[DefineOwnProperty]] 的演算法[2],特別是 10.a.ii。我/
猜/有可能可以不靠 'use strict' 跟 Object.defineProperty 做出這種實驗,可
能要看看 [[DefineOwnProperty]] 的回傳值用在什麼比較隱晦的地方(arguments
之類的),不過不繼續研究了。對 test262[3] 比較熟了人可以去裡面找找看。
[2] http://es5.github.com/#x8.12.9
[3] http://test262.ecmascript.org/
話說回來,SameValue(+0, -0) 是 false 的原因應該跟浮點數的內部實作有關
吧,所以 SameValue 應該是最快的。我的問題是,NaN !== NaN 我大概可以理
解,-0 === 0 的理由是什麼呢?
(在 HTML5 規範翻譯群最近還蠻不少規範討論的,寫一點分享到這個公開郵件群
來。上個禮拜還討論了一個禮拜的 AppCache。基本上群裡的人都可以討論可以公
開,不過不太清楚 QQ 群的技術機器人要怎麼搞?還有,有沒有違反 QQ 的使用條
例啊?不然的話,我一直是覺得 WHATWG IRC 頻道的紀錄[4]還蠻好用的。)
[4] http://krijnhoetmer.nl/irc-logs/
此致
Kenny
Received on Wednesday, 21 December 2011 09:34:31 UTC