null是JavaScript中的常规原语吗?

null是JavaScript中的常规原语吗?,javascript,null,primitive-types,Javascript,Null,Primitive Types,关于JavaScript中的null实际上是什么,有很多讨论。例如 在原语值中列出null,并说明它是: 表示空值的特殊关键字null也是一个基元 值 (以上重点是我的) 我最后一次参考埃里克·艾略特的书,书中写道: 在JavaScript中。。。甚至原始类型 使用属性引用对象时,获取对象处理 访问符号。它们会自动被一个对象包裹,所以 你可以调用他们的原型方法 使用属性访问符号时,基元类型的行为类似于对象,但不能为其指定新属性。原语 暂时用一个对象包装,然后该对象被 立即扔掉。任何为属性赋值的尝

关于JavaScript中的
null
实际上是什么,有很多讨论。例如

在原语值中列出
null
,并说明它是:

表示空值的特殊关键字null也是一个基元 值

(以上重点是我的)

我最后一次参考埃里克·艾略特的书,书中写道:

在JavaScript中。。。甚至原始类型 使用属性引用对象时,获取对象处理 访问符号。它们会自动被一个对象包裹,所以 你可以调用他们的原型方法

使用属性访问符号时,基元类型的行为类似于对象,但不能为其指定新属性。原语 暂时用一个对象包装,然后该对象被 立即扔掉。任何为属性赋值的尝试 似乎会成功,但随后尝试访问新的 财产将破产

实际上,以下语句将毫无问题地执行:

 "1".value = 1;
 (1).value = "1";
 false.value = "FALSE";
而他的

null.value = "Cannot set property of null";
抛出未捕获的类型错误。看

因此,至少在这方面,
null
的行为与其他原语不同


null
被认为是JavaScript中的常规原语吗?

是的,它是一个实际的原语

属性访问的例外情况是
null
undefined
,因为它们没有像字符串、布尔值和数字那样的包装类型

原语 值

未定义、Null、Boolean、Number或String类型之一的成员 如第8条所定义

注:基元值是直接在 语言实现的最低级别


当您尝试访问其他原语上的属性时,它们会透明地包装在对象中,以便可以链接到它们的原型,因此不会出现错误
null
undefined
没有原型,所以这不会发生,因此是一个错误。我不会把书中的东西当作章节。例如,说“…键/值对…是真正的对象”完全是错误的。我猜他是想说“密钥/值对集合”(又名散列),但这恰恰说明了这本书和其他许多书中的粗枝大叶。@torazaburo-这一部分对我的主题无关紧要。无论哪种情况,我的小提琴都充分证明了我的观点。不,这不是无关紧要的。我想说的是,作者是草率的。在本例中,他首先对“键/值对”的引用很马虎,然后更马虎地宣称“当您使用属性访问表示法时,基本类型的行为类似于对象”,这让您感到困惑,因为他没有澄清这不适用于null,并导致您不得不将此问题贴在上面。他可能可以通过声称“原始值”和“原始类型”之间的区别来为自己辩护,但我所看到的一切都将
null
称为原始值和原始类型。不是草率的,而是专注的。如果我花时间解释每一个小细节,我的书就糟透了。你必须读太多才能提取出值。原语通过对象处理来处理原型查找这一事实本身有点相切。在一本关于构建实际应用程序的书中,深入兔子洞来解释没有实际用途的东西的例外情况将是浪费空间。YDKJS将是解决JS规范中所有边缘小问题的更好地方。与其他原语相比,
null
undefined
还有什么不足之处?没有什么。我的意思是,这里和那里会有一些不同的行为,但这些行为主要是基于他们类型的性质。一个区别是,如果将
null
undefined
作为
.call()
.apply()
的第一个参数传递,则
窗口
对象将用作
值,而任何其他原语都将由其对象包装器表示。当然,原因是它们根本没有对象包装器。(这是特定于非严格模式代码的。严格模式将使用实际原语值作为
This