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

正在检查

if ( object == null )
      Do something

if ( !object )
      Do something

?

还有:

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


当前回答

看看这个:

   <script>
function f(a){
  alert(typeof(a));
  if (a==null) alert('null');
  a?alert(true):alert(false);
}
</script>
                                          //return:
<button onclick="f()">nothing</button>    //undefined    null    false
<button onclick="f(null)">null</button>   //object       null    false
<button onclick="f('')">empty</button>    //string               false
<button onclick="f(0)">zero</button>      //number               false
<button onclick="f(1)">int</button>       //number               true
<button onclick="f('x')">str</button>     //string               true

其他回答

一些精度:

Null和undefined是两个不同的值。一个表示没有名称的值,另一个表示没有名称。


对于if(o), if中发生的事情如下所示:

括号o中的表达式被求值,然后if语句开始对括号中的表达式的值进行类型强制——在我们的例子中是o。

JavaScript中的Falsy(将被强制为false)值为:",null, undefined, 0和false。

Null和undefined对于值相等都是false (Null ==undefined):它们都崩溃为布尔值false。它们不是同一个对象(null!==undefined)。

Undefined是全局对象(浏览器中的“window”)的一个属性,但它是一个基本类型,而不是对象本身。它是未初始化的变量和函数的默认值,没有返回语句。

null是Object的一个实例。null用于返回集合对象以指示空结果的DOM方法,该方法提供false值而不指示错误。

什么是类型?

类型是对值进行分类的一种方式。下面是一个包含有问题的类型及其typeof结果的表格。

Type Values type contains typeof result Is typeof result a lie?
Undefined Only: undefined "undefined" No
Null Only: null "object" Yes
Object Infinite amount of values: {}, {a: "b"}, ... "object" No

null不是一个对象,它是一个null类型的值。

typeof操作符在说谎!它返回“object”为空在JavaScript语言中是一个错误。

我在我的开源电子书中写了一章。你可以在这里阅读https://github.com/carltheperson/advanced-js-objects

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

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

在Javascript中,null不是对象类型,而是原始类型。

有什么不同? Undefined指的是一个没有被设置的指针。 Null指的是空指针,例如有人手动将一个变量设置为Null类型