2012-02-21 13 views
6

¿Por qué ParseInt es una función en lugar de un método?¿Por qué no se analiza? ¿Es un método?

Función:

var i = parseInt(X); 

Método:

var i = X.parseInt(); 
+3

Porque arrojaría un error si X no estuviera definido? – jishi

+4

@jishi: si 'X' está' undefined', siempre recibirá un error al intentar acceder a una propiedad. No estoy seguro de qué tendría que ver eso con 'parseInt' que no es un método de' Number'. –

+0

@amnotiam 'parseInt (undefined) === NaN' si' parseint' fuera un método de 'String' o' Number', entonces 'undefined.parseInt()' arrojaría una excepción no devolver 'NaN' – JaredMcAteer

Respuesta

13

Editar:

No estoy 100% seguro de por qué parseInt no es un método de String, excepto que se puede ejecutar en cualquier cosa. Parece que podría ser parte de Math pero tampoco es realmente una operación matemática.

Fin Editar

parseInt es un método del objeto global. En el navegador, el objeto global es window. Puede llamar al window.parseInt(), pero el motor JS le permite atajar llamadas a métodos globales.

Dicho esto, tiene algún costo, ya que el motor debe analizar la cadena de alcance buscando las definiciones de parseInt. En general, si estoy haciendo un solo para llamar a un procedimiento de este tipo dentro de un ámbito, voy a hacer referencia a ella fuera del mundial:

var foo = function (someString) { 
    var bar; 

    // ... 

    bar = window.parseInt(someString, 10); 

    // ... 
}; 

Si mi código tiene que hacer más de una llamada al método dentro de un ámbito, sin embargo, lo localizo y uso la referencia:

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

    // ... 

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

    // ... 
}; 
+3

Creo que probablemente esté preguntando por qué no es un método de 'Número'. –

+2

Sí, quizás sí, aunque creo que está más cerca de "¿por qué no' parseInt' es un método de 'String'?". – JAAulde

+1

@amnotiam - eso es lo que también pensé, pero parseInt() no tiene que (y probablemente no debería (bueno, al menos no es necesario ejecutarlo en números)) ejecutarse en números, pero en todo _pero_ números (Supongo que es por eso que no es un método de 'Número'). – powerbuoy

Cuestiones relacionadas