通过阅读有关undefined
here的MDN网络文档,我已经阅读
The global undefined property represents the primitive value undefined.
为什么要这样做?
null
仅仅是一个值,为什么他们创建了全局属性?
答案 0 :(得分:2)
为什么似乎丢失了-您必须向Brendan Eich询问。
the many quirks surrounding null
and undefined
只是null
是一个关键字(准确地说是文字表达,不能用作标识符),而undefined
不是。这就是现在的样子,并且鉴于网络上的许多脚本都将undefined
用作本地变量名称,因此现在做任何事情都为时已晚。 (至少ES5使全局undefined
不可写。)
答案 1 :(得分:0)
他们对布尔值的转换是相同的:
!!undefined === !!null
无论它们用于不同目的,undefined本身都是原始的:
typeof undefined; //undefined
typeof null: //object
没有必要解决原型继承中的最后一条链:
var obj = new function(){return this};
Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(obj))); //constructor's prototype --> Object.prototype --> null
除了从Node
或Element
或HTMLElement
原型继承的许多函数外,还期望它们返回object
,当找不到时,它们将null
返回给暗示他们应该给您一个物体,但什么也没找到:
document.getElementById("thiswontbethere"); //null
相反,对于未初始化的值,通常首选Undefined:
var obj = {};
obj.someKey //undefined;
Array.apply(null,Array(3)); //[undefined, undefined, undefined]
未定义并不一定要是全局的,但是如果您这样做:
Object.getOwnPropertyDescriptor(window,"undefined");//{value: undefined, writable: false, enumerable: false, configurable: false}
因此,显然您不能更改属性描述符,也不能更改值本身,但是内存分配是在较低层完成的,因此这是供应商实现。它不必是全球性的。
我以某种方式感到这是一个棘手的问题,您要求它不是要回答,而是间接确认js中包含一些“不良设计”元素。