Dlaczego parseInt funkcji zamiast metody?Dlaczego nie analizuje się metody?
Funkcja:
var i = parseInt(X);
Metoda:
var i = X.parseInt();
Dlaczego parseInt funkcji zamiast metody?Dlaczego nie analizuje się metody?
Funkcja:
var i = parseInt(X);
Metoda:
var i = X.parseInt();
Edit:
nie jestem w 100% pewien, dlaczego parseInt
nie jest metodą String
, z wyjątkiem tego, że można uruchomić na wszystko. Wygląda na to, że może być częścią Math
, ale nie jest to tak naprawdę operacja matematyczna.
End Edit
parseInt
to metoda obiektu globalnego. W przeglądarce globalnym obiektem jest window
. Można zadzwonić pod numer window.parseInt()
, ale mechanizm JS umożliwia wykonywanie skrótów połączeń do metod globalnych.
Powiedział, że jest to kosztowne, ponieważ silnik musi zeskanować łańcuch zasięgu, szukając definicji parseInt
. Generalnie, jeśli robię jeden zadzwonić do takiej metody w zakresie, będę odwoływać się globalny:
var foo = function (someString) {
var bar;
// ...
bar = window.parseInt(someString, 10);
// ...
};
Jeśli mój kod musi uczynić więcej niż jedno połączenie do metody w zakresie, jednak go zlokalizuję i używam odniesienia:
var foo = function (someString, someOtherString) {
var parseInt = window.parseInt,
bar,
baz;
// ...
bar = parseInt(someString, 10);
baz = parseInt(someOtherString, 10);
// ...
};
Myślę, że prawdopodobnie pyta, dlaczego nie jest to metoda "Numeru". –
Tak, może on jest - choć myślę, że jest bliższy "dlaczego nie jest" parseInt "metoda" String "?". – JAAulde
@amnotiam - to też sobie wymyśliłem, ale parseInt() nie musi (i prawdopodobnie nie powinien (no, przynajmniej nie trzeba go uruchamiać na liczbach)) działa na liczbach, ale na wszystkim _but_ liczbach (Chyba dlatego nie jest to metoda "Numeru". – powerbuoy
Ponieważ spowodowałoby to błąd, gdyby X było niezdefiniowane? – jishi
@jishi: Jeśli 'X' jest' niezdefiniowany', zawsze będziesz mieć błąd podczas próby uzyskania dostępu do właściwości. Nie jestem pewien, co by to miało wspólnego z 'parseInt' nie będącym metodą' Number'. –
@amnotiam 'parseInt (undefined) === NaN', jeśli' parseint' był metodą 'String' lub' Number', to 'undefined.parseInt()' rzucił wyjątek, a nie powrót 'NaN' – JaredMcAteer