primitivos - undefined javascript
¿Cuál es la diferencia entre nulo e indefinido en JavaScript? (30)
Podría considerar que no definido representa una ausencia de valor a nivel de sistema, inesperada o similar a un error y nula para representar la ausencia de valor a nivel de programa, normal o esperada.
a través de JavaScript: La Guía Definitiva
Quiero saber cuál es la diferencia entre null
y undefined
en JavaScript.
Tanto Null como undefined en JavaScript indican ausencia de valor.
var a = null; //variable assigned null value var b; // undefined
A pesar del hecho de que ambos existen por ausencia de valor, pero: No definido en realidad significa que la variable no está inicializada. Funciones que no devuelven nada y parámetros de función para los que no se proporciona ningún valor, se devuelve un valor indefinido. Utilice el operador de igualdad estricta === para distinguir entre nulo e indefinido.
Referencia: http://www.thesstech.com/javascript/null-and-undefined
Bien, podemos confundirnos cuando escuchamos acerca de null
e undefined
, pero comencemos de manera simple, ambos son falsos y similares de muchas maneras, pero una parte extraña de JavaScript hace que tengan algunas diferencias significativas, por ejemplo, typeof null
is ''object''
mientras que typeof undefined
es ''undefined''
.
typeof null; //"object"
typeof undefined; //"undefined";
Pero si los marca con ==
como se muestra a continuación, verá que ambos son falsos:
null==undefined; //true
También puede asignar null
a una propiedad de objeto oa una primitiva, mientras que undefined
se puede lograr simplemente no asignando nada.
Creo una imagen rápida para mostrarle las diferencias de un vistazo.
Como typeof devuelve undefined, undefined es un tipo donde como null es un inicializador indica que la variable no apunta a ningún objeto (prácticamente todo en Javascript es un objeto).
Con JavaScript, null es para objetos, indefinido es para variables, propiedades y métodos.
Para ser nulo, un objeto tiene que ser definido, de lo contrario será indefinido.
Si desea probar si un objeto existe, esto generará un error si el objeto no está definido:
Incorrecto:
if (myObj !== null && typeof myObj !== "undefined")
Debido a esto, primero debes probar typeof ():
Correcto:
if (typeof myObj !== "undefined" && myObj !== null)
Cuando declara una variable en javascript, se le asigna el valor undefined
. Esto significa que la variable está intacta y se le puede asignar cualquier valor en el futuro. También implica que no conoce el valor que esta variable mantendrá en el momento de la declaración.
Ahora puedes asignar explícitamente una variable null
. Significa que la variable no tiene ningún valor. Por ejemplo, algunas personas no tienen un segundo nombre. Entonces, en tal caso, es mejor asignar el valor nulo a la variable middlename de un objeto person.
Ahora suponga que alguien está accediendo a la variable middlename de su objeto personal y tiene el valor undefined
. No sabría si el desarrollador olvidó inicializar esta variable o si no tenía ningún valor. Si tiene el valor null
, el usuario puede inferir fácilmente que middlename no tiene ningún valor y no es una variable intacta.
Cuando un valor es nulo, no es nada y no contiene nada. Un valor vacío o variable todavía está lleno;Está lleno de vacío. El vacío es diferente de nulo, que simplemente no es nada. Por ejemplo, definir una variable y establecer su valor en una cadena vacía se ve así:
var myVariable = '''';
La variable myVariable está vacía, pero no es nula.
Undefined
es un estado, a veces usado como un valor, para representar una variable que aún no ha contenido un valor. tales como var abcd
; . Este estado es diferente de nulo, aunque tanto nulo como indefinido se pueden evaluar de la misma manera.
En JavaScript, undefined
significa que una variable se ha declarado pero aún no se le ha asignado un valor, como:
var TestVar;
alert(TestVar); //shows undefined
alert(typeof TestVar); //shows undefined
null
es un valor de asignación. Se puede asignar a una variable como una representación sin valor:
var TestVar = null;
alert(TestVar); //shows null
alert(typeof TestVar); //shows object
De los ejemplos anteriores, queda claro que undefined
y null
son dos tipos distintos: undefined
es un tipo en sí mismo (undefined) mientras que null
es un objeto.
null === undefined // false
null == undefined // true
null === null // true
y
null = ''value'' // ReferenceError
undefined = ''value'' // ''value''
En JavasSript hay 5 tipos de datos primitivos: String, Number, Boolean, null y undefined. Trataré de explicar con un simple ejemplo.
digamos que tenemos una función simple
function test(a) {
if(a == null){
alert("a is null");
} else {
alert("The value of a is " + a);
}
}
también en la función anterior si (a == nulo) es igual que si (! a)
Ahora cuando llamamos a esta función sin pasar el parámetro a
test(); it will alert "a is null";
test(4); it will alert "The value of a is " + 4;
además
var a;
alert(typeof a);
esto dará indefinido; hemos declarado una variable pero no hemos asignado ningún valor a esta variable; pero si escribimos
var a = null;
alert(typeof a); will give alert as object
tan nulo es un objeto. De alguna manera hemos asignado un valor nulo a ''a''
Escogí esto de here
El valor no definido es un valor primitivo que se utiliza cuando a una variable no se le ha asignado un valor.
El valor nulo es un valor primitivo que representa la referencia nula, vacía o inexistente.
Cuando declara una variable a través de var y no le asigna un valor, tendrá el valor indefinido. Por sí mismo, si intenta WScript.Echo () o alert () este valor, no verá nada. Sin embargo, si le agregas una cadena en blanco, de repente aparecerá:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Puede declarar una variable, establecerla en nula, y el comportamiento es idéntico, excepto que verá "nulo" impreso frente a "indefinido". Esta es una pequeña diferencia de hecho.
Incluso puede comparar una variable que no está definida a nula o viceversa, y la condición será verdadera:
undefined == null
null == undefined
Sin embargo, se consideran dos tipos diferentes. Si bien undefined es un tipo de todo para sí mismo, null se considera un valor de objeto especial. Puedes ver esto usando typeof () que devuelve una cadena que representa el tipo general de una variable:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
Ejecutar el script anterior dará como resultado el siguiente resultado:
undefined
object
Independientemente de que sean tipos diferentes, seguirán actuando igual si intentas acceder a uno de los miembros, por ejemplo, es decir, lanzarán una excepción. Con WSH verás el temido "''varname'' es nulo o no un objeto" y eso es si tienes suerte (pero eso es un tema para otro artículo).
Puede establecer explícitamente una variable como indefinida, pero le recomiendo que no lo haga. Recomiendo solo establecer las variables en nulo y dejar sin definir el valor de las cosas que se olvidó de establecer. Al mismo tiempo, realmente te animo a que siempre configures cada variable. JavaScript tiene una cadena de alcance diferente a la de los lenguajes de estilo C, lo que confunde fácilmente incluso a los programadores veteranos, y establecer variables en nulo es la mejor manera de evitar errores basados en ella.
Otra instancia en la que verá una ventana emergente indefinida es cuando utiliza el operador de eliminación. Aquellos de nosotros de un mundo C podríamos interpretar incorrectamente esto como destruir un objeto, pero no es así. Lo que hace esta operación es eliminar un subíndice de un Array o un miembro de un Objeto. Para Arrays no afecta la longitud, sino que ese subíndice ahora se considera indefinido.
var a = [ ''a'', ''b'', ''c'' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
El resultado del script anterior es:
0.) a
1.) undefined
2.) c
También obtendrá devuelto indefinido al leer un subíndice o miembro que nunca existió.
La diferencia entre nulo e indefinido es: JavaScript nunca establecerá nada en nulo, eso es lo que hacemos normalmente. Si bien podemos establecer variables a indefinidas, preferimos null porque no es algo que se haga por nosotros. Cuando estás depurando, esto significa que cualquier cosa configurada como nula es cosa tuya y no de JavaScript. Más allá de eso, estos dos valores especiales son casi equivalentes.
Explicaré undefined
, null
y Uncaught ReferenceError
:
1 - Uncaught ReferenceError
: la variable no se ha declarado en su script, no hay ninguna referencia a esta variable
2 - undefined
: Variable declarada pero no inicializada
3 - null
: Variable declarada y es un valor vacío
La diferencia entre undefined
y null
es mínima, pero hay una diferencia. Una variable cuyo valor undefined
está undefined
nunca se ha inicializado. A una variable cuyo valor es null
se le asignó explícitamente un valor null
, lo que significa que la variable se estableció explícitamente para que no tuviera ningún valor. Si comparas undefined
y un null
utilizando la expresión null==undefined
, serán iguales.
La mejor manera de entender la diferencia es despejar primero su mente del funcionamiento interno de JavaScript y simplemente entender las diferencias de significado entre:
let supervisor = "None"
// I have a supervisor named "None"
let supervisor = null
// I do NOT have a supervisor. It is a FACT that I do not.
let supervisor = undefined
// I may or may not have a supervisor. I either don''t know
// if I do or not, or I am choosing not to tell you. It is
// irrelevant or none of your business.
Hay una diferencia de significado entre estos tres casos, y JavaScript distingue los dos últimos casos con dos valores diferentes, null
e undefined
. Usted es libre de usar esos valores explícitamente para transmitir esos significados.
Entonces, ¿cuáles son algunos de los problemas específicos de JavaScript que surgen debido a esta base filosófica?
Una variable declarada sin un inicializador obtiene el valor
undefined
porque nunca dijo nada acerca de cuál era el valor deseado.let supervisor; assert(supervisor === undefined);
Una propiedad de un objeto que nunca se ha establecido se evalúa como
undefined
porque nadie dijo nada sobre esa propiedad.const dog = { name: ''Sparky'', age: 2 }; assert(dog.breed === undefined);
null
eundefined
son "similares" entre sí porque Brendan Eich lo dijo. Pero enfáticamente no son iguales entre sí.assert(null == undefined); assert(null !== undefined);
null
eundefined
afortunadamente tienen diferentes tipos.null
pertenece al tipoNull
yundefined
al tipoUndefined
. Esto está en la especificación, pero nunca lotypeof
debido al tipo de rareza que no repetiré aquí.Una función que llega al final de su cuerpo sin una declaración de retorno explícita devuelve
undefined
ya que no sabe nada sobre lo que devolvió.
Por cierto, hay otras formas de "nada" en JavaScript (es bueno haber estudiado Filosofía ...)
-
NaN
- Usando una variable que nunca ha sido declarada y recibiendo un
ReferenceError
- Usar una variable local
let
oconst
definida en su zona muerta temporal y recibir unReferenceError
Células vacías en matrices dispersas. Sí, estos ni siquiera están
undefined
aunque se comparan===
con indefinidos.$ node > const a = [1, undefined, 2] > const b = [1, , 2] > a [ 1, undefined, 2 ] > b [ 1, <1 empty item>, 2 ]
No definido significa que una variable ha sido declarada pero no tiene valor:
var var1;
alert(var1); //undefined
alert(typeof var1); //undefined
Null es una tarea:
var var2= null;
alert(var2); //null
alert(typeof var2); //object
Para el tipo undefined
, hay un solo valor: undefined
.
Para el tipo null
, hay un solo valor: null
.
Entonces, para ambos, la etiqueta es tanto su tipo como su valor.
La diferencia entre ellos. Por ejemplo:
-
null
es un valor vacío -
undefined
es un valor perdido
O:
-
undefined
no ha tenido un valor todavía -
null
tenía un valor y ya no lo tiene
En realidad, null
es una palabra clave especial , no un identificador, y por lo tanto no puede tratarlo como una variable para asignar.
Sin embargo, undefined
es un identificador . Sin embargo, tanto non-strict
modo non-strict
como en el strict
, puede crear una variable local del nombre no definido. ¡Pero esta es una idea terrible!
function foo() {
undefined = 2; // bad idea!
}
foo();
function foo() {
"use strict";
undefined = 2; // TypeError!
}
foo();
Per artículo completo de Ryan Morr sobre este tema ...
"En general, si necesita asignar un valor no a una variable o propiedad, pasarlo a una función o devolverlo desde una función, casi siempre es la mejor opción. Para decirlo simplemente, JavaScript usa indefinido y los programadores deberían utilizar nulo ".
Por favor, lea atentamente lo siguiente. Eliminará todas sus dudas con respecto a la diferencia entre nulo e indefinido en JavaScript. También puede utilizar la función de utilidad que se proporciona a continuación para determinar exactamente los tipos.
En JavaScript podemos tener los siguientes tipos de variables.
- Variables no declaradas
- Variables declaradas pero no asignadas
- Variables asignadas con literal indefinido
- Variables asignadas con nulo literal.
- Variables asignadas con algo distinto de indefinido o nulo
A continuación se explica cada uno de estos casos uno por uno.
Variables no declaradas : lo siguiente es válido para las variables no declaradas
- Solo se puede verificar con typeof () que devuelve la cadena ''undefined''
- ¿No se puede verificar con == o === o mediante un operador condicional ? (arroja un error de referencia)
Variables declaradas pero no asignadas
- typeof devuelve la cadena ''undefined''
- == comprobar con null devuelve true
- == verificar con devoluciones indefinidas verdadero
- === comprobar con null devuelve falso
- === verificar con undefined devuelve true
- Si o operador condicional ? devuelve falso
Variables asignadas con literal indefinido : estas variables se tratan de manera similar a las variables declaradas pero no asignadas .
Variables asignadas con nulo literal.
- typeof devuelve la cadena ''objeto''
- == comprobar con null devuelve true
- == verificar con devoluciones indefinidas verdadero
- === comprobar con null devuelve true
- === verificar con devoluciones indefinidas falso
- Si o operador condicional ? devuelve falso
Variables asignadas con algo distinto de indefinido o nulo
- typeof devuelve una de las siguientes cadenas: ''string'' , ''number'' , ''boolean'' , ''function'' , ''object'' , ''symbol''
A continuación se proporciona el algoritmo para la verificación correcta de tipo de una variable:
- Verifique si no ha sido declarado / no asignado / asignado con undefined utilizando typeof . devolver si se devuelve la cadena ''indefinido'' .
- Compruebe si hay null utilizando === . devuelve ''null'' si es verdadero .
- Compruebe el tipo real utilizando typeof . devuelve el tipo si no es igual a ''objeto''
- Llame a Object.prototype.toString.call (o) para determinar el tipo de objeto real. Devolverá una cadena de tipo ''[object ObjectType]'' para todos los objetos integrados en Javascript o DOM definidos. Para los objetos definidos por el usuario devuelve ''[objeto Objeto]''
También puede utilizar la siguiente función de utilidad para determinar los tipos. Actualmente soporta todos los tipos ECMA 262 2017.
function TypeOf(o,bReturnConstructor)
{
if(typeof o===''undefined'') return ''undefined''
if(o===null) return ''null''
if(typeof o!==''object'') return typeof o
var type=Object.prototype.toString.call(o)
switch(type)
{
//Value types:4
case ''[object Number]'': type=''number'';break;
case ''[object String]'': type=''string'';break;
case ''[object Boolean]'': type=''boolean'';break;
case ''[object Date]'': type=''date'';break;
//Error Types:7
case ''[object Error]'': type=''error'';break;
case ''[object EvalError]'': type=''evalerror'';break;
case ''[object RangeError]'': type=''rangeerror'';break;
case ''[object ReferenceError]'': type=''referenceerror'';break;
case ''[object SyntaxError]'': type=''syntaxerror'';break;
case ''[object TypeError]'': type=''typeerror'';break;
case ''[object URIError]'': type=''urierror'';break;
//Indexed Collection and Helper Types:13
case ''[object Array]'': type=''array'';break;
case ''[object Int8Array]'': type=''int8array'';break;
case ''[object Uint8Array]'': type=''uint8array'';break;
case ''[object Uint8ClampedArray]'': type=''uint8clampedarray'';break;
case ''[object Int16Array]'': type=''int16array'';break;
case ''[object Uint16Array]'': type=''uint16array'';break;
case ''[object Int32Array]'': type=''int32array'';break;
case ''[object Uint32Array]'': type=''uint32array'';break;
case ''[object Float32Array]'': type=''float32array'';break;
case ''[object Float64Array]'': type=''float64array'';break;
case ''[object ArrayBuffer]'': type=''arraybuffer'';break;
case ''[object SharedArrayBuffer]'': type=''sharedarraybuffer'';break;
case ''[object DataView]'': type=''dataview'';break;
//Keyed Collection Types:2
case ''[object Map]'': type=''map'';break;
case ''[object WeakMap]'': type=''weakmap'';break;
//Set Types:2
case ''[object Set]'': type=''set'';break;
case ''[object WeakSet]'': type=''weakset'';break;
//Operation Types
case ''[object RegExp]'': type=''regexp'';break;
case ''[object Proxy]'': type=''proxy'';break;
case ''[object Promise]'': type=''promise'';break;
case ''[object Object]'': type=''object'';
if(bReturnConstructor && o.constructor) type=o.constructor.toString().match(/^function/s*([^/s(]+)/)[1];
break;
default:
type=type.split('' '')[1]
type=type.substr(0,type.length-1)
}
return type
}
null y undefined son ambos se utilizan para representar la ausencia de algún valor.
var a = null;
a está inicializado y definido.
typeof(a)
//object
null es un objeto en JavaScript
Object.prototype.toString.call(a) // [object Object]
var b;
b es indefinido y no inicializado
Las propiedades de objetos indefinidos también son indefinidas. Por ejemplo, "x" no está definido en el objeto c y si intenta acceder a cx, devolverá indefinido.
Generalmente asignamos nulo a variables no indefinidas.
tl; dr
Use null
para establecer una variable que sabe que es un objeto.
Use undefined
para establecer una variable cuyo tipo sea mixto.
Este es mi uso de 5 primitivas y tipo de Objeto, y eso explica la diferencia entre «caso de uso» de undefined
o null
.
Cuerda
Si sabe que una variable es solo una cadena mientras todo el ciclo de vida, por convención, podría inicializarla, a ""
:
("") ? true : false; // false
typeof ""; // "string";
("Hello World") ? true : false; // true
typeof "Hello World"; // "string"
Número
Si sabe que una variable es solo un número durante todo el ciclo de vida, por convención, puede inicializarlo, a 0
(o NaN
si 0
es un valor importante en su uso):
(0) ? true : false; // false
typeof 0; // "number";
(16) ? true : false; // true
typeof 16; // "number"
o
(NaN) ? true : false; // false
typeof NaN; // "number";
(16) ? true : false; // true
typeof 16; // "number"
Booleano
Si sabe que una variable es solo un valor booleano mientras todo el ciclo de vida, por convención, podría inicializarla, en false
:
(false) ? true : false; // false
typeof false; // "boolean";
(true) ? true : false; // true
typeof true; // "boolean"
Objeto
Si sabe que una variable es solo un Objeto mientras todo el ciclo de vida, por convención, podría inicializarlo, a null
:
(null) ? true : false; // false
typeof null; // "object";
({}) ? true : false; // true
typeof {}; // "object"
Nota: el uso inteligente fuera de nulo es la versión falsa de un Objeto porque un Objeto siempre es true
, y porque el object
devuelve tipo typeof null
. Eso significa que typeof myVarObject
devuelve un valor coherente tanto para el objeto como para el tipo nulo.
Todos
Si sabe que una variable tiene un tipo mixto (cualquier tipo, mientras que todo el ciclo de vida), por convención, puede inicializarlo a undefined
.
null
es un valor especial que significa "sin valor". null
es un objeto especial porque typeof null
devuelve ''object''.
Por otro lado, undefined
significa que la variable no ha sido declarada, o no se le ha dado un valor.
null es una palabra clave de lenguaje que se evalúa en un valor especial que generalmente se usa para indicar la ausencia de un valor. El uso del operador typeof en null devuelve la cadena "objeto", lo que indica que se puede considerar nulo como un valor de objeto especial que indica "sin objeto". Sin embargo, en la práctica, null se suele considerar como el único miembro de su propio tipo, y se puede usar para indicar "sin valor" para números y cadenas, así como para objetos. La mayoría de los lenguajes de programación tienen un equivalente a nulo de JavaScript: puede que esté familiarizado con él como nulo o nulo.
JavaScript también tiene un segundo valor que indica la ausencia de valor. El valor indefinido representa un tipo más profundo de ausencia. Es el valor de las variables que no se han inicializado y el valor que obtiene cuando consulta el valor de una propiedad de objeto o elemento de matriz que no existe. El valor no definido también es devuelto por las funciones que no tienen valor de retorno y el valor de los parámetros de la función para los que no se proporciona ningún argumento. undefined es una variable global predefinida (no una palabra clave de idioma como null) que se inicializa en el valor indefinido. En ECMAScript 3, undefined es una variable de lectura / escritura, y se puede establecer en cualquier valor. Este error se corrige en ECMAScript 5 y el indefinido es de solo lectura en esa versión del idioma. Si aplica el operador typeof al valor indefinido, devuelve "indefinido", lo que indica que este valor es el único miembro de un tipo especial.
A pesar de estas diferencias, nulo e indefinido indican una ausencia de valor y, a menudo, se pueden usar indistintamente. El operador de igualdad == los considera iguales. (Utilice el operador de igualdad estricta === para distinguirlos). Ambos son valores falsos: se comportan como falsos cuando se requiere un valor booleano. Ni null ni undefined tienen propiedades o métodos. De hecho, utilizando. o [] para acceder a una propiedad o método de estos valores provoca un TypeError.
Podría considerar que no definido representa una ausencia de valor a nivel de sistema, inesperada o similar a un error y nula para representar la ausencia de valor a nivel de programa, normal o esperada. Si necesita asignar uno de estos valores a una variable o propiedad o pasar uno de estos valores a una función, casi siempre es la opción correcta.
null es una palabra clave especial que indica una ausencia de valor.
Piénsalo como un valor, como:
- "foo" es una cadena,
- verdad es booleano,
- 1234 es el número,
- nulo no está definido.
la propiedad indefinida indica que a una variable no se le ha asignado un valor que incluya nulo también. Me gusta
var foo;
La variable vacía definida es null
del tipo de datos undefined
Ambos representan un valor de una variable sin valor
Y null
no representa una cadena que no tiene ningún valor - cadena vacía -
Me gusta
var a = '''';
console.log(typeof a); // string
console.log(a == null); //false
console.log(a == undefined); // false
Ahora si
var a;
console.log(a == null); //true
console.log(a == undefined); //true
PERO
var a;
console.log(a === null); //false
console.log(a === undefined); // true
Así que cada uno tiene su propia manera de usar
indefinido usarlo para comparar el tipo de datos variable
nulo usarlo para vaciar un valor de una variable
var a = ''javascript'';
a = null ; // will change the type of variable "a" from string to object
null y undefined son dos tipos de objetos distintos que tienen lo siguiente en común:
- ambos solo pueden contener un solo valor, nulo e indefinido respectivamente;
- ambos no tienen propiedades ni métodos y un intento de leer cualquiera de las propiedades resultará en un error en tiempo de ejecución (para todos los demás objetos, obtendrás un valor indefinido si intentas leer una propiedad no existente);
- los valores nulos e indefinidos se consideran iguales entre sí y para nada más por los operadores
==
y!=
.
Las similitudes sin embargo terminan aquí. Por una vez, hay una diferencia fundamental en la forma en que se implementan las palabras clave nulas e indefinidas . Esto no es obvio, pero considere el siguiente ejemplo:
var undefined = "foo";
WScript.Echo(undefined); // This will print: foo
indefinido , NaN e Infinity son solo nombres de variables "superglobulares" preinicializadas; se inicializan en tiempo de ejecución y pueden ser anuladas por variables globales o locales normales con los mismos nombres.
Ahora, intentemos lo mismo con null :
var null = "foo"; // This will cause a compile-time error
WScript.Echo(null);
Ups! null , true y false son palabras clave reservadas: el compilador no le permitirá usarlas como nombres de propiedades o variables
Otra diferencia es que undefined es un tipo primitivo, mientras que null es un tipo de objeto (que indica la ausencia de una referencia de objeto). Considera lo siguiente:
WScript.Echo(typeof false); // Will print: boolean
WScript.Echo(typeof 0); // Will print: number
WScript.Echo(typeof ""); // Will print: string
WScript.Echo(typeof {}); // Will print: object
WScript.Echo(typeof undefined); // Will print: undefined
WScript.Echo(typeof null); // (!!!) Will print: object
Además, hay una diferencia importante en la forma en que se tratan null y undefined en el contexto numérico:
var a; // declared but uninitialized variables hold the value undefined
WScript.Echo(a === undefined); // Prints: -1
var b = null; // the value null must be explicitly assigned
WScript.Echo(b === null); // Prints: -1
WScript.Echo(a == b); // Prints: -1 (as expected)
WScript.Echo(a >= b); // Prints: 0 (WTF!?)
WScript.Echo(a >= a); // Prints: 0 (!!!???)
WScript.Echo(isNaN(a)); // Prints: -1 (a evaluates to NaN!)
WScript.Echo(1*a); // Prints: -1.#IND (in Echo output this means NaN)
WScript.Echo(b >= b); // Prints: -1 (as expected)
WScript.Echo(isNaN(b)); // Prints: 0 (b evaluates to a valid number)
WScript.Echo(1*b); // Prints: 0 (b evaluates to 0)
WScript.Echo(a >= 0 && a <= 0); // Prints: 0 (as expected)
WScript.Echo(a == 0); // Prints: 0 (as expected)
WScript.Echo(b >= 0 && b <= 0); // Prints: -1 (as expected)
WScript.Echo(b == 0); // Prints: 0 (!!!)
nulo se convierte en 0 cuando se usa en expresiones aritméticas o comparaciones numéricas; de manera similar a falso , es básicamente un tipo especial de "cero". indefinido , por otro lado, es un verdadero "nada" y se convierte en NaN ("no un número") cuando intentas usarlo en un contexto numérico.
Tenga en cuenta que null y undefined reciben un tratamiento especial de los operadores ==
y !=
, Pero puede probar la verdadera igualdad numérica de a y b con la expresión (a >= b && a <= b)
.
nulo - Es un valor de asignación. Que se utiliza con la variable para representar ningún valor. (es un objeto)
indefinido : es una variable que no tiene ningún valor asignado. Así que javascript le asignará un indefinido. (es un tipo de datos)
no declarado : si la variable no se crea en absoluto, se conoce como no declarado.
nulo : ausencia de valor para una variable; indefinido : ausencia de variable propiamente dicha;
..where variable es un nombre simbólico asociado con un valor.
JS podría ser lo suficientemente amable como para iniciar implícitamente variables recién declaradas con nulo , pero no lo hace.
Sólo para añadir mis puntos de vista -
Una variable que se declara solo, y nunca se usa en ninguna parte, es eliminada por un compilador de optimización en caso de lenguajes compilados como C ++ [o una advertencia está marcada en el IDE]. En última instancia, significa que la variable no existe porque su memoria nunca se asigna.
En el caso de un intérprete de javascript, [supongo] que una variable se trata como existente solo desde el punto en que se le asigna un valor. Antes de ese punto, su tipo es "indefinido", y no se le asigna memoria. Y, por lo que su tipo es indefinido.
Un nulo en javascript es un valor que representa una dirección, pero esa dirección no apunta a nada todavía [referencia inexistente]. Sin embargo, es un valor.
Básicamente, Undefined es una variable global que javascript crea en el tiempo de ejecución si null significa que no hay un valor asignado a la variable (en realidad null es un objeto).
Tomemos un ejemplo:
var x; //we declared a variable x, but no value has been assigned to it.
document.write(x) //let''s print the variable x
Sin definir eso es lo que obtendrás como salida.
Ahora,
x=5;
y=null;
z=x+y;
y obtendrás 5 como salida. Esa es la principal diferencia entre lo no definido y lo nulo.
En javascript todas las variables se almacenan como pares de valores clave. Cada variable se almacena como variable_name: variable_value / reference .
indefinido significa que a una variable se le ha dado un espacio en la memoria, pero no se le ha asignado ningún valor. Como práctica recomendada, no debe usar este tipo como una tarea.
En ese caso, ¿cómo denotar cuándo quiere que una variable no tenga valor en un punto posterior del código? Puede usar el tipo nulo , que también es un tipo que se usa para definir lo mismo, la ausencia de un valor, pero no es lo mismo que no definido, ya que en este caso realmente tiene el valor en memoria. Ese valor es nulo
Ambos son similares pero el uso y el significado son diferentes.
Si una variable no está inicializada, entonces no está definida. indefinido no es un objeto. Ejemplo: var MyName; console.log (typeof MyName);
Verifique el registro de la consola en la herramienta de desarrollo, se imprimirá como indefinido.
null es un objeto. Si desea que alguna variable sea nula, entonces se usa null. Existe una variable null pero no se conoce el valor. nulo no se inicializa automáticamente.
Ejemplo: var MyName = null; console.log (typeof MyName); Verifique el registro de la csole en la herramienta de desarrollo, será un objeto.
- indefinido significa que una variable se ha declarado pero aún no se le ha asignado un valor.
- nulo es un valor de asignación. Se puede asignar a una variable como una representación de ningún valor.
- indefinido y nulo son dos tipos distintos:
undefined es un tipo en sí mismo (undefined) mientras que null es un objeto.
- Las variables no asignadas se inicializan mediante JavaScript con un valor predeterminado de indefinido.
- JavaScript nunca establece un valor en nulo. Eso debe hacerse programáticamente.