2012-02-21 2 views
6

Почему функция parseInt вместо метода?Почему не parseInt метод?

Функция:

var i = parseInt(X); 

Метод:

var i = X.parseInt(); 
+3

Потому что это вызовет ошибку, если X не определено? – jishi

+4

@jishi: Если 'X'' undefined', вы всегда будете получать сообщение об ошибке при попытке доступа к свойству. Не уверен, что это должно было бы сделать с 'parseInt', не являющимся методом' Number'. –

+0

@amnotiam 'parseInt (undefined) === NaN', если' parseint' был методом 'String' или' Number', тогда 'undefined.parseInt()' выдавал исключение, а не возвращал 'NaN' – JaredMcAteer

ответ

13

Edit:

Я не 100% уверен, почему parseInt не метод String, за исключением того, что он может работать на чем угодно. Кажется, это может быть часть Math, но это не совсем математическая операция.

End Edit

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'. –

+2

Да, возможно, он - хотя я думаю, что это ближе к «почему не' parseInt' метод 'String'?». – JAAulde

+1

@amnotiam - вот что я тоже понял, но parseInt() не должен (и, вероятно, не должен (ну, по крайней мере, не обязательно запускать его по номерам)) запускаться на числах, но на всех _but_ numbers (Полагаю, именно поэтому это не метод «Номер»). – powerbuoy

Смежные вопросы