为什么null在JavaScript中被认为是一个对象?
正在检查
if ( object == null )
Do something
和
if ( !object )
Do something
?
还有:
null和undefined之间的区别是什么?
为什么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。这必须通过编程来完成。