乐趣区

关于javascript:前端面试题每日3题20220904

每日 3 题

16 以下代码执行后,控制台中的输入内容为?

let a = {n: 1};
let b = a;
a.x = a = {n: 2};
console.log(a.x);
console.log(b.x);

17 以下代码执行后,控制台中的输入内容为?

let a = {};
let b = "123";
let c = 123;
a[b] = "b";
a = "c";
console.log(a[b]);

18 以下代码执行后,控制台中的输入内容为?

function user(obj) {
  obj.name = "aaa";
  obj = new Object();
  obj.name = "bbb";
}

let person = new Object();
user(person);
console.log(person.name);

公众号【明天也要写 bug】获取更多前端面试题

答案和解析

16

// 答案:undefined {n: 2}
// 考查赋值运算符

let a = {n: 1};
let b = a; // b 指向 {n: 1}

a.x = a = {n: 2};
// 首先找到 a.x 期待赋值,即对象 {n: 1} 的属性 x
// 而后计算赋值 = 右侧表达式:a = {n: 2},将 a 赋值为一个新对象
// a 赋值为一个新对象不会影响 b
// 赋值表达式自身的值为要赋值的值,所以 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}

17

// 答案:c
// 考查对象的属性名、键拜访
// 对于对象 obj = {a: 1}
// obj.a 语法被称为“属性拜访”// obj['a'] 语法被称为“键拜访”// 在对象中,属性名永远是字符串
// 如果应用 string 意外的值作为属性名,那么它首先会被转换为字符串
let a = {};
let b = "123";
let c = 123;
a[b] = "b"; // 此时 a => {'123':'b'}
a = "c"; // 此时 a => {'123':'c'}
console.log(a[b]); // 输入 c

18

// 答案:aaa
// 考查援用类型
function user(obj) {// obj 指向 person 援用的对象 {}
  obj.name = "aaa"; // obj person 援用的对象变为 {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'}
退出移动版