2013-03-20 35 views

回答

2

在進一步觀察後,我在ECMAScript規範中發現了這一點。 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

當parseInt函數調用函數時,採取以下步驟:

  1. 令inputString是的ToString(字符串)。
  2. 設S是新創建的inputString的子字符串,該字符串由不是 的StrWhiteSpaceChar的第一個字符以及該字符後面的所有字符組成。 (換句話說,刪除前導空白 空間。)如果inputString不包含任何這樣的字符,則讓S爲空字符串。
  3. 讓符號爲1.
  4. 如果S不爲空且S的第一個字符是負號 - 讓sign爲-1。
  5. 如果S不是空的和S的第一字符是一個加號+或減號 - 時,則來自釀酒
  6. 設R = ToInt32(基數)去除第一字符 。
  7. 讓stripPrefix爲true。
  8. 如果R0,那麼©Ecma International 2011 105 a。如果R < 2或R> 36,則返回NaN。 b。如果R16,則讓stripPrefix爲false。
  9. 否則,R = 0 a。設R = 10。
  10. 如果stripPrefix爲true,則爲 a。如果S的長度至少爲2並且S的前兩個字符是-0x‖或-0X‖,則從S的前兩個字符中刪除 並讓R = 16。
  11. 如果S包含任何字符不是一個基數R數字,那麼讓Z是S的子串,包括所有第一個這樣的字符之前的所有 個字符;否則,設Z爲S.
  12. 如果Z爲空,則返回NaN。
  13. 令數學成爲用Z表示的數學整數值,用基數R表示法使用字母 A-Z和a-z表示數值爲10到35的數字。(但是,如果R爲10且Z包含多於20個的 有效數字,則第20個之後的每個有效數字可以用0數字代替,可以使用 實現;並且如果R不是2,4,8,則數學計算可以是與以Z表示的以R表示的數學整數值的實施相關的近似值。)
    1. 令number爲mathInt的Number值。
    2. 返回符號號碼。 注意parseInt可能只將字符串的前導部分解釋爲整數值;它會忽略任何不能被解釋爲整數表示法的一部分的字符,並且沒有指出任何這樣的字符被忽略了 。

當parseFloat函數被調用時,採取以下步驟:

  1. 讓inputString是的ToString(字符串)。
  2. 設置trimmedString是inputString的子字符串,由最左邊的字符組成,該字符不是 StrWhiteSpaceChar和該字符右側的所有字符。 (換句話說,刪除前導空白 空間。)如果inputString不包含任何這樣的字符,則讓trimmedString爲空字符串。
  3. 如果trimmedString和trimmedString的任何前綴均不滿足StrDecimalLiteral的語法(請參閱 9.3.1),則返回NaN。
  4. 讓numberString是trimmedString的最長前綴,該前綴可能是trimmedString本身,它滿足StrDecimalLiteral的語法 。
  5. 返回numberString的MV的Number值。

注意parseFloat可能只將字符串的前導部分解釋爲Number值;它將忽略任何不能被解釋爲小數文字符號的一部分的字符,並且沒有指示任何這樣的字符被忽略。

如果參數強制爲NaN,則返回true,否則返回false。

  1. 如果ToNumber(number)是NaN,則返回true。
  2. 否則,返回false。 注意ECMAScript代碼測試值X是否是NaN的可靠方法是X!== X形式的表達式。當且僅當X是NaN時, 結果才爲真。
+0

請注意,這是要遵循的算法,並且每個瀏覽器/ JS引擎分別在本機上實現它,因爲瀏覽器/引擎創建者認爲適合選擇的語言。 – ajp15243 2013-03-20 20:46:35

6

他們是當地的功能,也許編碼到您的JS引擎寫的語言 - 你需要聯繫它的來源。

但是,您可能對描述算法如何工作的EcmaScript specification更感興趣。

如果你幸運的話,對於一些功能你甚至可以找到一個JS的等價物。你會發現它們大多在依據標準測試ES實現的頁面上。

+1

是的這個。需要注意的是這些函數並未在JavaScript_中實現。 'console.log(parseInt)// => function parseInt(){[native code]}' – 2013-03-20 20:42:58

+1

@AlexWayne:實際上,其中一些* *是用JS實現的:http://code.google.com/p/ V8 /源/瀏覽/中繼/ SRC/v8natives。js – Bergi 2013-03-20 20:48:22

+2

我想「some」或「most」會更精確:) – 2013-03-20 20:59:52

0

這些功能是根據瀏覽器具體實現的,並不是用JS編寫的(除非有人決定用JS編寫瀏覽器引擎)。代碼不能保證在不同的環境中是相同的,儘管它們必須(理論上)遵守ECMAScript規範的行爲。