- From: Kang-Hao (Kenny) Lu <kennyluck@w3.org>
- Date: Mon, 14 Feb 2011 05:58:58 +0900
- To: Timothy Chien <timdream@gmail.com>
- CC: 中文HTML5同樂會ML <public-html-ig-zh@w3.org>
(11/02/11 13:35), Timothy Chien wrote: > 最後發現有問題的程式碼是這個: > var randomString = Math.random().toString(16).substr(2); // substr(2) > 是把前面的 "0." 拿掉 補一個javascirpt URL(以方便測試): javascript:alert(Math.random().toString(16).substr(2)) 話說,你下次可以 考慮直接送一個HTML的附件來給大家玩。W3C伺服器吃5MB以下的附件,而且就會有 網址。 > > 在 Webkit,randomString 的長度會在 7 和 8 之間跳, > Firefox 則是 13 或是 14 ....... 對了,你說Webkit是指Chorme/V8嗎?手邊沒有Chrome,無法測試。Safari/Nitro 的情形的確是7至8位。 > [我剪] > > 但是還是想要調查為什麼兩個瀏覽器有這麼大的差異。 > 當時我和同事的結論是, > 雖說 ECMAScript [1] 有規定 Number 型別的數字是 64-bit format IEEE 754 > value,0~1 之間有 2^64 個值 [2], > 但是 webkit 的假亂數產生器不會用到所有的位數,導致 toString(16) 之後的 > 長度跟 Firefox 不一樣。 > 只是我自己也沒小心,以為 random() 的小數點長度是固定的。 看了John Hax兄講的,我也覺得這可能是toString的問題。如果ECMA沒規定 toString的在radix!=10的情形的話,只能算你倒楣了 xdd 話說,一個規範裡面沒寫(unspecified)真的是最遭的情形,一般來說都是至少 隨便寫一個上去比較好,一般來說實作意願不高的話就用 RFC 2119[1]的"MAY"。 [1] http://tools.ietf.org/html/rfc2119 剛好這幾天Webkit的人最近在WHATWG提一個新的強密碼(cryptographically strong)的亂數的API[2],而且似乎已經實作完成了[3](Webkit新API的產出量越 來越快了)。拿Nightly試一下如果 toString(16)還是7至8位,那似乎就確定是 toString的問題了。 [2] http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-February/thread.html#30241 [3] https://bugs.webkit.org/show_bug.cgi?id=22049 順道一提,之前提到[4]的windows.btoa跟windows.atob已經進入WHATWG版的 HTML(沒版號版)了[5]。 [4] http://lists.w3.org/Archives/Public/public-html-ig-zh/2011Jan/0059 [5] http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#atob
Received on Sunday, 13 February 2011 20:57:56 UTC