亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果未找到 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 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號