写代码的时候,想到的和遇到的一些问题。想来可以做面试题。特记录于此。
对象
1、{} === {}
是否相等?
2、obj.a === obj.a
是否相等?
const obj = {
a: {}
}
3、怎样使 obj.a !== obj.a
const obj = {
get a() {
return {}
}
}
4、obj.a === obj.a
是否相等? obj.a
访问到的是哪一个?
const obj = {
a: {}
get a() {
return {}
}
}
5、getter
访问与访问器访问有何区别?
getter 可定义在实例和类上,值为一个无参数的函数,可以惰性赋值。
6、getter
访问与访问器存在相同属性的情况下,如何通过getter
访问
const obj = {
a: {}
get a() {
return {}
}
}
当在实例上定义 getter
访问,则 getter
存在于实例上。虽然可以定义同名属性,但却访问不到 。
使用 delete obj.a
将会都删掉。
可以考虑将其定义到原型上。
class A {
a = 1
get a() {
return 2
}
}
const obj = new A()
obj.a === 1 // true
obj.__proto__a === 2 // true
delete obj.a
obj.a === 2 // true
7、arr[0] === null
是否相等?为什么?
const obj = { a: 1 }
const arr = [obj]
obj = null
8、arr.get(obj) === null
是否相等?为什么?
let obj = { a: 1 }
const map = new WeakMap()
map.set(obj, { a: 1 })
obj = null
9、a, b, c 的区别?如何在 class 写法上的原型上定义值?
class A {
a = 1
constructor() {
this.b = 2
}
c() {
return 3
}
}
a, b, c 的区别?如何在原型上定义值?