Javascript 如果找不到对象的属性(Obj构造函数),则返回值不是未定义的。为什么?
考虑一个基本示例,其中我试图请求一个对象中不存在的属性 案例一:(一般对象) 回答:Javascript 如果找不到对象的属性(Obj构造函数),则返回值不是未定义的。为什么?,javascript,html,javascript-objects,Javascript,Html,Javascript Objects,考虑一个基本示例,其中我试图请求一个对象中不存在的属性 案例一:(一般对象) 回答:未定义 这意味着,如果存在不存在的属性,则正确地将其称为未定义的 案例二:(对象构造函数) 现在,我要做同样的事情-首先制作一个从字符串构造函数继承的字符串,它从对象构造函数继承。对象构造函数的\uuuuu proto\uuuu没有名为\uuuuu proto\uuu的属性,因此答案应该是未定义的。但是(奇怪的是)它返回null。这是无法理解的 As far as I know, if the property
未定义
这意味着,如果存在不存在的属性,则正确地将其称为未定义的
案例二:(对象构造函数)
现在,我要做同样的事情-首先制作一个从字符串构造函数
继承的字符串,它从对象构造函数
继承。对象构造函数的\uuuuu proto\uuuu
没有名为\uuuuu proto\uuu
的属性,因此答案应该是未定义的。但是(奇怪的是)它返回null
。这是无法理解的
As far as I know, if the property of an Object is not found - its value should be `**undefined**` and not `**null**`.
现在,请有人帮助理解-在进入
原型链之后,概念和实现应该保持不变。因此,如果未找到对象构造函数
的\uuuu proto\uuuu
属性,为什么答案不应该是未定义
,而应该是空
按照Javascript的设计方式,null
位于每个对象原型链的顶端。对于内部方法GetPrototypeOf
,其类型签名为()→ 对象| Null
,并且它:
确定为该对象提供继承属性的对象。空值表示没有继承的属性
访问对象的\uuuu proto\uuuu
属性,或使用object.getPrototypeOf
将调用该内部方法。\uuuu proto\uuu
属性确实存在于大多数对象上(因此它不会返回未定义的
),但它所调用的对象不能保证具有内部原型(如果没有,则该操作返回null
)
查看\uuuu proto\uuuu
是如何在对象上执行getter/setter的。prototype
:
console.log(Object.getOwnPropertyDescriptor(Object.prototype,“\uuuuuuuuuuu”)
这意味着,当我们特别尝试为任何项目(大多数项目都会有)查找\uuuu proto\uuuuuu
属性时,这将触发函数getPrototypeOf()
,该函数具有内置代码,如果找不到它,则返回原型链接
或null
(代码中的2个选项中的1个). 对吗?(这将删除未定义
的情况,因为值是从逻辑内部返回的null
)是。如果需要,您可以自己定义这样一个属性:一个getter,它不if(cond)返回{someObj}else返回null代码>谢谢!顺便说一句,在问了这个问题后,我找到了你的身份证,想问你一个问题。发现你还有3分钟,所以无论如何你都要回来。。PS::p
As far as I know, if the property of an Object is not found - its value should be `**undefined**` and not `**null**`.