En JavaScript, tenemos algo llamado indefinido . Dije algo, porque realmente no sé si es una clase base, o una variable incorporada, o una palabra clave, o cualquier otra cosa. Solo sé que está ahí.
Para verlo en acción, simplemente puede escribir:
undefined;
typeof undefined;
¿Alguien puede explicarme por qué esta cosa se ha insertado en JavaScript? Tenemos null
valor en este lenguaje, por lo tanto, no debería ser algo así null
. En otros idiomas, cuando no conocemos el valor de una propiedad o variable, simplemente lo establecemos como nulo. Aquí podemos hacer lo mismo.
¿Cómo podemos usar esta cosa en JavaScript?
javascript
language-design
Saeed Neamati
fuente
fuente
undefined
y cuándo usarnull
Respuestas:
Hay DOS cosas que debes entender sobre indefinido ...
undefined
que solo puede tener un valor .undefined
Ahora lea lo siguiente con mucho cuidado ...
Hay tantos valores de tipo
number
(10, 10.01, 1e1). Pero solo puede haber un valor de tipoundefined
, y ese valor se almacena en la variableundefined
. Ese valor tiene representación NO literal - por ejemplo, los valores de número1
,100
,1e-1
son todos los literales de número de tipo, pero el valor almacenado en la variableundefined
no tiene forma literal.undefined
es una variable, solo una variable normal, que JavaScript declara y le asigna el valor de tipoundefined
en el ámbito global. Entonces puedes hacer todo lo siguiente ...undefined
, puede generar el valor de tipoundefined
mediante la expresiónvoid 0
, cuyo único propósito es devolver un valor de tipoundefined
.NO. Al igual que nadie puede explicar por qué las variables no declaradas van al ámbito global en lugar de local. Solo necesita entrenarse para usarlo inteligentemente en lugar de tratar de encontrar justificaciones para su existencia.
Aunque
null
puede hacer cosasundefined
, está más o menos relacionado con losobjects
escalares. De hecho, JavaScript se consideranull
un objeto:typeof null
devuelve "objeto".En mi opinión, la conclusión es NO tratar de razonar los propósitos absolutos de
undefined
ynull
, y usarlos en su código de manera inteligible, para que su código sea legible, mantenible y reutilizable.fuente
the bottom line is to NOT try to reason the absolute purposes of undefined and null
, parece que JavaScript es un poco más lejos de ser un lenguaje lógico y simplemente tenemos que acostumbrarnos a él, como experimentar un mundo nuevo.undefined
". Realmentevoid
evalúa una expresión, ignora el valor de retorno y devuelve elundefined
valor. En cuanto a las diferencias.undefined
es usado por el motor JS para decir que esto no tiene valor. USTED lonull
usa para decir que esto no tiene valor. Hay una clara distinción.undefined = 100; typeof undefined;
devuelve "indefinido" para mí, si intenta asignar a nulo, obtiene un error. Solo quería aclarar eso para futuros lectores.Perdón por responder una pregunta anterior, pero la razón por la que necesita tanto indefinido como nulo es simple: en un lenguaje de tipeo basado en prototipos absolutamente debe diferenciar entre "este objeto no define un valor para X" y "este objeto dice que X es nada / nulo / vacío ".
Sin esta capacidad, no hay forma de recorrer la cadena de prototipos, por lo que la herencia no puede funcionar; debe poder determinar que obj.someProp no está definido para poder ver obj.prototype.someProp y avanzar en la cadena hasta encontrar un valor. Si obj.someProp devuelve nulo, no habría forma de saber si realmente fue nulo o simplemente significaba "mira mi prototipo". La única forma de evitar esto es inyectar un poco de magia misteriosa detrás de escena, lo que rompe su capacidad de confundirse con las cadenas prototipo y hacer varios otros trozos de magia negra JS.
Al igual que gran parte de Javascript, la idea de indefinido y nulo parece torpe y estúpida al principio, luego absolutamente brillante más tarde (luego de vuelta a torpe y estúpida pero con una explicación razonable).
Un lenguaje como C # no se compilará si accede a una propiedad que no existe y otros lenguajes dinámicos a menudo arrojan excepciones en tiempo de ejecución cuando toca una propiedad que no existe, lo que significa que debe usar construcciones especiales para probarlas. Las clases más significan que cuando se crea una instancia de un objeto, ya conoce su cadena de herencia y todas las propiedades que tiene: en JS puedo modificar un prototipo de 15 pasos en la cadena y esos cambios aparecerán en los objetos existentes.
fuente
Hay una variable global
undefined
, que se establece en el valor indefinido. Las personas malvadas pueden configurarlo en otra cosa, por lo que probablemente sea mejor no confiar en él.typeof undeclaredVariable == 'undefined'
. tratar de leer el valor de una variable subfinada te arrojaráReferenceError
).null
está sutilmente roto, porquetypeof null == 'object'
. No sé por qué tenemosundefined
ynull
, probablemente, algún accidente histórico.fuente
Bueno,
undefined
es un valor centinela obtenido al evaluar algo que no está definido como opuestonull
, que es el valor exactamente definido para no representar nada .Entonces, por ejemplo, el valor de retorno de una función que no define un valor de retorno no está definido. El valor de una propiedad no definida en un objeto no está definido. El valor de retorno de una declaración, que no es una expresión, no está definido (aunque no verá que esto ocurra fuera de la consola).
Tenga en cuenta que puede crear una función, que devuelve explícitamente
undefined
y puede definir explícitamente una propiedad con el valor deundefined
un objeto, porque al final es un valor válido. Lo haría para comunicarse explícitamente, que algo no está definido .Se podría pensar en la relación de
undefined
ynull
como eso entreNaN
y0
.fuente
undefined
esvoid
?void
en JavaScript es un operador unario , que toma cualquier argumento y devuelve el valorundefined
.