2012-02-21 93 views
6

爲什麼parseInt函數而不是方法?爲什麼不parseInt方法?

功能:

var i = parseInt(X); 

方法:

var i = X.parseInt(); 
+3

因爲如果X未定義,它會引發錯誤? – jishi 2012-02-21 14:51:15

+4

@jishi:如果'X'是'undefined',那麼在嘗試訪問一個屬性時總是會出錯。不知道'parseInt'不是'Number'方法會怎麼做。 – 2012-02-21 14:53:15

+0

@amnotiam'parseInt(undefined)=== NaN'如果'parseint'是'String'或'Number'的方法,那麼'undefined.parseInt()'會拋出一個異常而不返回'NaN' – JaredMcAteer 2012-02-21 15:05:09

回答

13

編輯:

我不是100%肯定,爲什麼parseInt不是String的方法,不同的是它可以在任何東西上運行。似乎它可能是Math的一部分,但它也不是一個真正的數學運算。

結束編輯

parseInt是全局對象的方法。在瀏覽器中,全局對象是window。您可以撥打window.parseInt(),但JS引擎可以讓您快速調用全局方法。

也就是說,由於引擎必須掃描範圍鏈以查找parseInt的定義,因此需要付出一些代價。一般來說,如果我想提出一個單一的範圍內,這樣的方法調用,我將引用它關閉全球:如果我的代碼需要的範圍內,使超過一個方法調用

var foo = function (someString) { 
    var bar; 

    // ... 

    bar = window.parseInt(someString, 10); 

    // ... 
}; 

,但是,我將其本地化並使用參考:

var foo = function (someString, someOtherString) { 
    var parseInt = window.parseInt, 
     bar, 
     baz; 

    // ... 

    bar = parseInt(someString, 10); 
    baz = parseInt(someOtherString, 10); 

    // ... 
}; 
+3

我想他可能會問爲什麼它不是'Number'方法。 – 2012-02-21 14:52:12

+2

是的,也許他是 - 雖然我認爲它更接近於「爲什麼不是'parseInt'方法'String'?」。 – JAAulde 2012-02-21 14:55:34

+1

@amnotiam - 這就是我也想到的,但parseInt()不必(並且可能不應該(至少不需要在數字上運行它))在數字上運行,但在所有數據上運行_but_數字(我想這就是爲什麼它不是'Number'的方法)。 – powerbuoy 2012-02-21 14:57:11

相關問題