2010-03-11 15 views
5
100['toString'] //does not fail 
100.toString //fails 

¿por qué?100.toString vs 100 ['toString']

100.toString no es lo mismo que 100.toString(). Entonces, ¿por qué en el segundo caso no obtengo la función como valor devuelto?

Respuesta

17

La segunda línea falla porque se analiza como un número "100.", seguido de "toString".

Para utilizar la notación de punto, cualquiera de los siguiente trabajo:

(100).toString 
100.0.toString 
100..toString 
var a = 100; 
a.toString 

Si usted está tratando de llamada la función toString, también tendrá que incluir los paréntesis:

(100).toString() 
100.0.toString() 
100..toString() 
var a = 100; 
a.toString() 

Prefiero usar paréntesis (o una variable, si ya la tengo), porque las alternativas podrían ser confusas y poco intuitivas.

+0

Otro ejemplo: '100..toString()' funciona tan bien desde el primer periodo se cuenta como parte del número, y el segundo como parte de la sintaxis acceso a la propiedad. –

+0

Tenga en cuenta que '100' y' 100.0' no son lo mismo. – Gumbo

+0

@Max, buen punto. Parece algo gracioso, pero agregaré eso también. –

5

Use (100).toString en su lugar.

1

Parens es la mejor manera de hacerlo. También tienes el mismo problema con las definiciones de función.

function() {}.call() => fails 
(function() {}).call() => succeeds