猿问

如果未找到 Object 的属性,则返回值为 Not undefined。为什么?

考虑一个基本示例,我试图请求对象中不存在的属性


案例一:(一般对象)


var obj1 = {

  name: "Jack",

  age: 29


console.log(obj1.city); 

回答: undefined


这意味着如果存在不存在的属性,则正确地称为undefined.


案例二:(对象构造器)


现在,我要做同样的事情——首先创建一个继承自的字符串,String Constructor继承自Object Constructor。__proto__Object-Constructor 没有名为的属性,__proto__因此答案应该是未定义的。而是(奇怪地)它返回null。这是无法理解的。


As far as I know, if the property of an Object is not found - its value should be `**undefined**` and not `**null**`. 

现在,请有人帮助理解 - 在上升之后,prototype chain概念和实现应该保持不变。所以,如果没有找到 的__proto__属性,为什么答案不Object Constructor应该是???undefinednull


眼眸繁星
浏览 177回答 1
1回答

慕勒3428872

Javascript 的设计方式位于每个对象null的原型链的顶部。正如规范所说,对于内部方法,它的类型签名是,它:GetPrototypeOf( ) → Object | Null确定为该对象提供继承属性的对象。空值表示没有继承的属性。访问__proto__对象的属性或使用Object.getPrototypeOf将调用该内部方法。该__proto__属性确实存在于大多数对象上(因此它不返回undefined),但不保证调用它的对象具有内部原型(如果没有,则该操作返回null)。看看__proto__getter/setter 如何Object.prototype:console.log(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__'));对于通过 的任何对象,该属性都将存在Object.prototype,大多数情况下都是如此。吸气剂可能会返回null。请注意,如果您创建一个不继承自的对象,则Object.prototype该__proto__属性将不在原型链中,您将获得undefined:const obj = Object.create(null);console.log(obj.__proto__);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答