Première partie de la question :
Pourquoi null est-il considéré comme un objet en JavaScript ?
C'est une erreur de conception JavaScript qu'ils ne peuvent pas réparer maintenant. Il aurait dû être de type null, et non de type object, ou ne pas l'avoir du tout. Cela nécessite une vérification supplémentaire (parfois oubliée) lors de la détection d'objets réels et est source de bogues.
Deuxième partie de la question :
Est-ce que la vérification
if (object == null)
Do something
la même chose que
if (!object)
Do something
Les deux vérifications sont toujours toutes deux fausses, sauf pour :
-
est indéfini ou nul : tous deux sont vrais.
-
est primitif, et 0, ""
ou faux : premier contrôle faux, deuxième vrai.
Si l'objet n'est pas une primitive, mais un véritable objet, tel que new Number(0)
, new String("")
o new Boolean(false)
alors les deux vérifications sont fausses.
Ainsi, si le terme "objet" est interprété comme signifiant un objet réel, les deux contrôles sont toujours les mêmes. Si les primitives sont autorisées, les contrôles sont différents pour 0, ""
et faux.
Dans des cas comme object==null
les résultats non évidents pourraient être une source de bugs. L'utilisation de ==
n'est jamais recommandé, utilisez ===
à la place.
Troisième partie de la question :
Et aussi :
Quelle est la différence entre null et undefined ?
En JavaScript, une différence est que null est de type object et undefined est de type undefined.
En JavaScript, null==undefined
est vrai, et considéré comme égal si le type est ignoré. Pourquoi ils ont décidé cela, mais 0, ""
et faux ne sont pas égaux, je ne sais pas. Cela semble être une opinion arbitraire.
En JavaScript, null===undefined
n'est pas vrai puisque le type doit être le même dans ===
.
En réalité, null et undefined sont identiques, puisqu'ils représentent tous deux la non-existence. Il en va de même pour 0, et ""
pour cette question aussi, et peut-être les conteneurs vides []
y {}
. Tant de types du même rien sont une recette pour les insectes. Il est préférable d'utiliser un seul type ou aucun. J'essaierais d'en utiliser le moins possible.
Les termes "faux", "vrai" et " !" sont un autre sac de vers qui pourrait être simplifié, par exemple, if(!x)
y if(x)
seuls sont suffisants, vous n'avez pas besoin de vrai et de faux.
A déclaré var x
est de type indéfini si aucune valeur n'est donnée, mais il devrait être le même que si x n'avait jamais été déclaré du tout. Une autre source de bogue est un conteneur rien vide. Il est donc préférable de le déclarer et de le définir ensemble, comme par exemple var x=1
.
Les gens tournent en rond en essayant de comprendre tous ces différents types de rien, mais ce n'est que la même chose dans des vêtements compliqués et différents. La réalité est
undefined===undeclared===null===0===""===[]==={}===nothing
Et peut-être que tous devraient lancer des exceptions.
10 votes
Null n'est pas un objet en JavaScript !
typeof null === 'object'
mais c'est un bug ! Voici un lien Regardez toutes les vidéos et profitez-en :)2 votes
J'aime utiliser le C/C++ comme vérité axiomatique de ce qu'est une variable indéfinie et à valeur NULL, car c'est très simple. On peut ensuite comparer ces définitions aux spécifications d'autres langages.