2011-04-14 25 views
16

Estoy intentando esta prueba en la consola de Chrome: Quiz¿Cuál es la diferencia entre "indefinido" e indefinido?

Puedo explicar la mayoría de ellos un poco después de probarlos. Pero una cosa me confunde:

var x = [typeof x, typeof y][1]; 
    typeof typeof x; 

.... devuelve "cadena", lo cual no tiene ningún sentido para mí.

var x = [typeof x, typeof y][1]; 

retornos "indefinido"

typeof "undefined"

devuelve "cadena", que tiene cierto sentido, porque era indefinido entre comillas. Pero, en general, no veo el propósito de "indefinido" en la coexistencia con indefinido. Además, ¿qué tipo de sintaxis de matriz es esa? "Javascript The Good Parts" dice que no hay matrices multidimensionales.

+0

mira esto para saber cómo indefinido está relacionada con el alcance https://codepen.io/grumpy/post/undefined-scope-in-javascript –

Respuesta

30
  1. undefined es en realidad window.undefined en la mayoría de las situaciones. Es solo una variable.
  2. window.undefined sucede a no ser definido, a menos que alguien lo define (y tratar undefined = 1typeof undefined habrá "number").
  3. typeof es un operador que siempre devuelve una cadena, que describe el tipo de un valor.
  4. typeof window.undefined te da "undefined" - de nuevo, solo una cadena.
  5. typeof "undefined" da "string", al igual que typeof "foo" would.
  6. Por lo tanto, da "string".

En relación con esta sintaxis:

[1, 2][1]; 

eso no es una matriz multidimensional - que está meramente creación de una matriz primero arr = [1, 2], y luego seleccionando elemento 1 de ella: arr[1].

1

"undefined" es una cadena (literal), es indefinido ehr ... undefined

var x = [typeof x, typeof y][1] supuestamente devuelve la cadena "undefined" (de typeof y). Ahora si solicita typeof "undefined", devuelve la cadena "string". Y si solicita el typeof "string" (de nuevo) devuelve "string" por supuesto.

Es seguro decir que typeof [anything] siempre devuelve una cadena (literal), por lo que typeof typeof something siempre será "cadena".

+1

Creo que es útil decir que "indefinido" es una cadena literal está entre comillas – sdm350

2

undefined es un global indefinido por defecto.

typeof devuelve una cadena que describe el tipo de objeto.

Así:

[typeof x, typeof y][1]; 
[typeof undefined, typeof undefined][1]; 
["undefined", "undefined"][1]; 
"undefined" 

typeof "undefined" == "string" 
typeof undefined == "undefined" 
typeof 1 == "number" 
typeof {} == "object" 

Además, ¿qué tipo de sintaxis de matrices es que?

Es un literal de matriz con [1] en el extremo por lo que devuelve el objeto en el índice 1.

"Javascript las partes buenas" dice que no existen matrices multidimensionales.

No hay, pero una matriz puede contener otras matrices. Este no obstante.

1

Whoa, esta es una pregunta difícil de explicar. El operador "typeof" devuelve una cadena que describe el tipo de su operando. Por lo tanto:

typeof undefined 

devuelve la cadena "indefinido", y

typeof typeof undefined 

devuelve la cadena "cadena", que es el tipo de la cadena "indefinido". Creo que es confuso porque indefinido es tanto un tipo como un valor.

Segunda parte: de hecho no hay matrices multidimensionales (como tales) en JavaScript. En esta expresión:

var x = [typeof x, typeof y][1]; 

El primer conjunto de corchetes es una matriz literal que consta de 2 elementos. El segundo conjunto de corchetes hace referencia al elemento 1 de esa matriz (typeof y). De manera que la expresión es efectivamente equivalente a esto:

var x = typeof y; 
1
  1. [typeof x, typeof y] es una matriz que contiene algo parecido a la normalidad ["string", "number"] o posiblemente ["undefined", "undefined"], dependiendo de los tipos de x y y.
  2. x = ["string", "number"][1] toma el segundo elemento de esa matriz y lo asigna a x.
  3. typeof x devuelve el tipo de x como la cadena "string".
  4. typeof "string" es "string".

En cuanto a lo que es la diferencia entre "undefined" y undefined: uno es una cadena, el otro un objeto. typeof siempre devuelve el tipo de la variable como una cadena, porque puede redefinir undefined en otra cosa para que ya no pueda compararla correctamente, pero "undefined" == "undefined" es siempre cierto.

Cuestiones relacionadas