为什么null在JavaScript中被认为是一个对象?

正在检查

if ( object == null )
      Do something

if ( !object )
      Do something

?

还有:

null和undefined之间的区别是什么?


当前回答

Undefined意味着一个变量已经声明,但它没有被赋值,而Null可以赋给一个变量,表示“没有值”。(Null是赋值运算符)

2.Undefined是一个类型本身,而Null是一个对象。

3.Javascript本身可以将任何未赋值的变量初始化为undefined,但它永远不能将变量的值设置为null。这必须通过编程来完成。

其他回答

(name is undefined)

你:你叫什么名字?(*) JavaScript:名字?名字是什么?我不知道你在说什么。你从来没提过任何名字。你在(客户端)看到其他脚本语言了吗?

name = null;

你:你叫什么名字? JavaScript:我不知道。

简而言之,未定义是指事物没有概念存在;它没有类型,在此范围内从未被引用过;Null是已知对象存在的位置,但不知道值是多少。

需要记住的一件事是,null在概念上与false或""或诸如此类的不一样,即使它们在类型转换后相等,即。

name = false;

你:你叫什么名字? 布尔值为false。

name = '';

你:你叫什么名字? JavaScript:空字符串


*: name在此上下文中的意思是一个从未定义过的变量。它可以是任何未定义的变量,然而,name是几乎任何HTML表单元素的属性。它可以追溯到很久以前,在id之前就设立了。它很有用,因为id必须是唯一的,但名称不必是唯一的。

未定义和未定义不是一回事。

age;

年龄的价值是什么?

电脑:好的,让我查一下我的内存/参考表.....在这一点上(你问的时间),我没有看到任何标识符名为年龄,不在这个范围/上下文或任何父范围/上下文;我不知道年龄。也许稍后我会遇到一个指令,将该标识符添加到内存中,但它现在不存在。

var age;

你:年龄的价值是什么;

电脑:好的,检查一下我的记忆……我在引用表中看到一个标识符,它的名字是age,但在我添加它的时候,没有值或指针或任何东西被分配给它,所以我不知道;你可以认为它(年龄)空了/什么都没有/没用。

var age = null;

你:年龄的价值是什么;

电脑:好的,检查一下我的记忆……我看到年龄在我的参考表:它是空的。基本上,它是nothing/empty,你不能用这个值做任何事情;这是故意的。

现在,我可能不应该这样解释,但希望这是有意义的。

我明白为什么null被设计成JS中的一个对象,我个人也喜欢这样。

Null和undefined实际上意味着同样的事情:空/无。区别在于它在概念上是如何使用的。

我认为null是开发者想要的虚无;一些东西被设为null是为了不代表任何东西。我将未定义视为计算机意图的虚无;开发者/用户无意中发现了一些没有价值的东西。

例如,如果你从库/sdk调用一个函数并返回null,你几乎可以确定这是由开发人员/作者故意设计的;他们特别想表明虚无。

另见- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null

问题的第一部分

为什么null在JavaScript中被认为是一个对象?

这是他们现在无法修复的JavaScript设计错误。它应该是null类型,而不是object类型,或者根本没有它。在检测真实对象时,需要进行额外的检查(有时会忘记),这是bug的来源。

问题的第二部分:

正在检查 If (object == null) 做某事 和 如果对象(!) 做某事

这两个检查总是都是假的,除了:

对象未定义或为空:均为true。 对象是原语,0,"",或false:第一次检查为假,第二次检查为真。

如果对象不是一个原语,而是一个真实的对象,比如new Number(0)、new String("")或new Boolean(false),那么两个检查都为假。

因此,如果'object'被解释为一个真实的对象,那么两个检查总是相同的。如果允许使用原语,则对0、""和false进行不同的检查。

在object==null这样的情况下,不明显的结果可能是bug的来源。不建议使用==,请使用===代替。

问题的第三部分:

还有: null和undefined之间的区别是什么?

在JavaScript中,一个区别是null的类型是object,而undefined的类型是undefined。

在JavaScript中,null==undefined为真,如果忽略type则认为相等。为什么他们决定,但是0 ""和false不相等,我不知道。这似乎是一个武断的观点。

在JavaScript中,null===undefined不为真,因为在===中的类型必须相同。

实际上,null和undefined是相同的,因为它们都表示不存在。0和“”也是如此,也许还有空容器[]和{}。如此多相同的“无”是滋生bug的秘诀。一种或完全没有是更好的。我会尽量少用。

'false', 'true'和'!'是另一个可以简化的问题,例如,如果(!x)和如果(x)单独是充分的,你不需要真和假。

如果没有给出值,则声明的var x是未定义的类型,但它应该与从未声明x相同。另一个错误源是空容器。所以最好同时声明和定义它,比如var x=1。

人们绕着圈子转来转去,试图弄清楚所有这些不同类型的虚无,但它们都是同样的东西,只是穿着复杂的不同衣服。现实是

undefined===undeclared===null===0===""===[]==={}===nothing

也许所有都应该抛出异常。

使用null来定义没有值的东西,使用undefined当你期望一些东西可能根本没有定义。

例如,如果一个变量没有值,将其赋值为null。

var weDontHaveAValue = null;

如果你期望某些东西可能根本没有定义,例如一个可选的选项参数,使用undefined。

if (typeof args.optionalParam !== 'undefined') { }

Undefined意味着一个变量已经声明,但它没有被赋值,而Null可以赋给一个变量,表示“没有值”。(Null是赋值运算符)

2.Undefined是一个类型本身,而Null是一个对象。

3.Javascript本身可以将任何未赋值的变量初始化为undefined,但它永远不能将变量的值设置为null。这必须通过编程来完成。