2011-11-19 16 views
10

Duplicar posible:
Can you explain why ++[[]][+[]]+[+[]] = 10matriz de JavaScript al número

Me pregunto algo por unos días ... Sé que unario mas en JavaScript convierte primero es el operando de Número. Estoy aplicando + a una matriz vacía y me da el siguiente resultado:

+[] == 0 

Cuando hago esto:

+[1] == 1 

Pero:

+[1,2] == NaN 

Las dos últimas cosas son casi claro, pero ¿por qué la matriz vacía es 0 ?! Es esto el contacto con:

[] == false 

Algunas veces ECMAScript hace que me pregunte mucho ...

alert([![]+[]][+[]][+[]]+[![]+[]][+[]][+!+[]]+[!+[]+[]][+![]][+![]]+[![]+[]][+[]][+!+[]]+[![]+[]][+[]][+!+[]+!+[]]+' '+(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]); 

Saludos!

+7

http://stackoverflow.com/questions/7202157/can-you-explain-why-10/7202287#7202287 al final publiqué una explicación para '+ [] === 0'. – pimvdb

+1

@pimvdb Eso está mal ... pero una gran respuesta. –

+0

¡Gracias! ¡Gran respuesta! –

Respuesta

5

La forma stringified del vacío Array es una cadena vacía:

> [].toString() 
"" 

El operador unario + convierte a Number objetos, así, se convierte una cadena vacía a 0:

> Number("") 
0 

Este explica por qué +[] == 0 es verdadero.