为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2022-05-22 11:31:08
考虑一个基本示例,我试图请求对象中不存在的属性案例一:(一般对象)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
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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__);


查看完整回答
反对 回复 2022-05-22
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号