let a = { n: 1 };
let b = a;
a.x = a = { n: 2 };
console.log(a.x);
console.log(b.x);
let a = {};
let b = "123";
let c = 123;
a[b] = "b";
a[c] = "c";
console.log(a[b]);
function user(obj) {
obj.name = "aaa";
obj = new Object();
obj.name = "bbb";
}
let person = new Object();
user(person);
console.log(person.name);
公眾號【今天也要寫bug】獲取更多前端面試題
成都創(chuàng)新互聯(lián)是一家專業(yè)提供科爾沁右翼前企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站設(shè)計、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為科爾沁右翼前眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
// 答案:undefined { n: 2 }
// 考察賦值運(yùn)算符
let a = { n: 1 };
let b = a; // b 指向 { n: 1 }
a.x = a = { n: 2 };
// 首先找到 a.x 等待賦值,即對象 { n: 1 } 的屬性 x
// 然后計算賦值=右側(cè)表達(dá)式:a = { n: 2 },將 a 賦值為一個新對象
// a 賦值為一個新對象不會影響 b
// 賦值表達(dá)式本身的值為要賦值的值,所以 a = { n: 2 } 返回 { n: 2 }
// 所以 { n: 1 } 的屬性 x 被賦值為 { n: 2 }
console.log(a.x); // a 被賦值為 { n: 2 },沒有屬性 x,故輸出:undefined
console.log(b.x); // b.x 即為 { n: 1 } 的屬性 x,故輸出:{ n: 2 }
// 答案:c
// 考察對象的屬性名、鍵訪問
// 對于對象 obj = { a: 1 }
// obj.a 語法被稱為“屬性訪問”
// obj['a'] 語法被稱為“鍵訪問”
// 在對象中,屬性名永遠(yuǎn)是字符串
// 如果使用 string 意外的值作為屬性名,那么它首先會被轉(zhuǎn)換為字符串
let a = {};
let b = "123";
let c = 123;
a[b] = "b"; // 此時 a => {'123':'b'}
a[c] = "c"; // 此時 a => {'123':'c'}
console.log(a[b]); // 輸出 c
// 答案:aaa
// 考察引用類型
function user(obj) {
// obj 指向 person 引用的對象{}
obj.name = "aaa"; // obj person 引用的對象變?yōu)?{name:'aaa'}
obj = new Object(); // obj 引用新對象,對 person 無影響
obj.name = "bbb"; // obj => {name:'bbb'},對 person 無影響
}
let person = new Object(); // person => {}
user(person);
console.log(person.name); // person => {name:'aaa'}