(譯) 送你 43 道 JavaScript 面试题 (轉載)

[译] 送你 43 道 JavaScript 面试题

學習自(純紀錄自己學了甚麼,非營利)

https://juejin.im/post/6844903869378461710

第三題

1
2
3
4
5
6
7
8
9
10
const shape = {
radius: 10,
diameter() {
return this.radius * 2;
},
perimeter: () => 2 * Math.PI * this.radius
};

shape.diameter()
shape.perimeter()

我的答案:

1
20 and 62.83185307179586

正確答案

1
20 and NaN

解析

对于箭头函数,this关键字指向是它所在上下文(定义时的位置)的环境,与普通函数不同! 这意味着当我们调用perimeter时,它不是指向shape对象,而是指其定义时的环境(window)。没有值radius属性,返回undefined

第五題 (我覺得滿酷的)

1
2
3
4
5
6
7
8
9
10
const bird = {
size: "small"
};

const mouse = {
name: "Mickey",
small: true
}
mouse[bird.size] // true
mouse[bird["size"]] // true

第七題(不會錯的小概念)

1
2
3
4
5
6
7
8
9
let a = 3;
let b = new Number(3);
let c = 3;

console.log(a == b); // true
console.log(a === b); // false
console.log(b === c); // false

// 因為b是對象,用===不會隱式轉型

第12題

1
2
3
4
5
6
7
8
9
10
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

const lydia = new Person("Lydia", "Hallie");
const sarah = Person("Sarah", "Smith");

console.log(lydia);
console.log(sarah);

答案:

Person {firstName: “Lydia”, lastName: “Hallie”}andundefined

解析

new創造構造函數,然後sarah執行函數會定義全局的firstName以及lastName

第16題

詭異的用法

1
2
3
4
5
6
7
8
9
10
function getPersonInfo(one, two, three) {
console.log(one);
console.log(two);
console.log(three);
}

const person = "Lydia";
const age = 21;

getPersonInfo`${person} is ${age} years old`;

答案

1
2
3
["", "is", "years old"] 
Lydia
21

第25題(小概念)

1
2
const obj = { a: "one", b: "two", a: "three" };
console.log(obj);

答案:

{ a: “three”, b: “two” }

第29題

1
2
3
4
5
6
7
const a = {};
const b = { key: "b" };
const c = { key: "c" };

a[b] = 123;
a[c] = 456;
console.log(a[b]);

答案:

456

解析

利用[??], 記得裡面要設成字符串

1
2
3
4
5
6
7
const a = {};
const b = { key: "b" };
const c = { key: "c" };

a[b] = 123; // 這樣會把他當成變量
// 如果要設定a對象鑑b的值 : a['b']
console.log(a); // {[object Object]: 123}

所以那一題其實是這樣

1
2
3
4
5
6
7
8
9
const a = {};
const b = { key: "b" };
const c = { key: "c" };

a[b] = 123;
console.log(a) // {[object Object]: 123}
a[c] = 456;
console.log(a) // {[object Object]: 456}
console.log(a[b]);

第35題(小概念)

1
new Boolean(false); // 因為是對象所以為真值

第43題

1
console.log([..."Lydia"];)

答案:

[“L”, “y”, “d”, “i”, “a”]