上一题下一题

原型链属性查找过程如何进行,hasOwnProperty 与 in 操作符的判断结果为什么可能不同

基础版
来源:alibaba初级工程师hasOwnProperty与in原型链
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

在 JavaScript 里,访问一个对象属性时,查找过程不是只看对象本身,而是会沿着原型链往上找。

比如执行:

它的查找过程大概是:

1. 先在 obj 自身属性上查找 name; 2. 如果找到了,就直接返回; 3. 如果没找到,就去 obj. proto ,也就是它的原型对象上找; 4. 如果原型对象上还没找到,就继续去原型的原型上找; 5. 一直找到 Object.prototype; 6. 如果最终到 null 还没找到,就返回 undefined。

所以原型链本质上就是对象之间通过 [[Prototype]] 形成的一条查找链。

hasOwnProperty 和 in 的区别就在这里。

hasOwnProperty 只判断属性是不是对象自身拥有的,不会去原型链上查找:

只有 name 是 obj 自己的属性时才返回 true。

而 in 操作符会判断属性是否存在于对象自身或者它的原型链

登录后查看完整内容