2012-02-21 62 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

相关问题