2010-09-07 22 views
10

Duplicar posible:
Null object in javascript¿Es nulo un objeto en JavaScript?

Hola, he leído sobre this thread nula en JavaScript, pero estoy muy confundido acerca de la identidad de null ahora.

Como se sabe que typeof(null) evalúa a object debido the language design error, y ECMA establece que es nula The Null Type.

8.2 The Null Type 
    The Null type has exactly one value, called null. 

Entonces ¿por qué la gente sigue diciendo que null es un objeto?

Alguien dijo que null es un objeto singleton. ¿Así es como todos ven el nulo como en JavaScript también?

+1

@ karim79 Sí, he leído ese hilo y puse mi pregunta como un comentario a parte de la respuesta, pero no conseguir una respuesta, por lo que he planteado aquí. Gracias – c4il

+1

Respondió usted mismo con la cita. null (un valor que se representa a sí mismo, leído como "nada más" y nulo === nulo, para todos los nulos) es el único ocupante del tipo nulo. La "objetividad" real es, como usted señala, abierta a la discusión, pero las características de nulo lo convierten en un punto mayormente mudo. –

+0

su enlace "error de diseño de idioma" hace referencia a un documento de Douglas Crockford. Yo (personalmente) no sugiero que tome todo lo que dice textualmente. – Reinsbrain

Respuesta

10

Nulo es la ausencia de un objeto. Indefinido significa que aún no se ha asignado, y nulo significa que se le ha asignado que no sea nada.

nulo no es realmente un objeto singleton, porque desreferenciarlo provocará un error; for (var x in null) le dará un error. Piensa en los días del puntero; null era el valor que tenía un puntero cuando no apuntaba a un objeto.

+1

'for (var x in null);' no arrojará en muchos navegadores, aunque debería, al menos como se especifica en la [3ª edición] (http://bclary.com/2004/11/07/#a- 12.6.4) de ECMAScript (la operación 'ToObject' se lanzará cuando el valor sea' null' o 'undefined'). Pero esto ha cambiado, ahora en [ECMAScript 5] (http://www.ecma262-5.com/ELS5_HTML.htm#Section_12.6.4), si la expresión es 'null' o' undefined', la instrucción simplemente termina (una finalización de declaración normal). – CMS

+1

Nice, ECMA spec en formato HTML. ¡Estuve buscando eso mucho tiempo! :) – c4il

7

No, null es uno de los pocos tipos primitivos (otros son números, cadenas, booleanos e indefinido). Todo lo demás es un objeto, incluidas funciones, matrices y expresiones regulares. Los números, cadenas y booleanos a menudo se llaman "similares a objetos" porque tienen métodos, pero son inmutables. Los objetos, por otro lado, son mutables.

+0

La mutabilidad no tiene nada que ver con ser un objeto. Consulte Object.freeze en EcmaScript 5 que permite la creación de objetos inmutables. Los objetos nativos en EcmaScript 3 también son objetos y pueden ser inmutables. Null no es un objeto porque puede responder a ningún mensaje, no tiene propiedades ni métodos. Esta es la razón por la cual (instancia nula de tipo) es falsa para todo tipo. –

+1

@mikesamuel: eliminó la parte "ofensiva" de mi respuesta :) –

+0

* Object-like * puede ser el término incorrecto para describir cómo las primitivas se empaquetan temporalmente cuando se intenta utilizar como objetos. – alex

1

null no se puede considerar un objeto porque no puede tener propiedades. Es una palabra clave que representa una primitiva, como true y false.

> true instanceof Object 
false 
> null instanceof Object 
false 
Cuestiones relacionadas