公众号上看的每日一题,搬砖来记录下,会把一些重点的评论摘抄下来。
下面输出什么???
1、
let c = { greeting: 'Hey!' }
let d
d = c
c.greeting = 'Hello'
console.log(d.greeting)
- A: Hello
- B: undefined
- C: ReferenceError
- D: TypeError
2、
let a = 3
let b = new Number(3)
let c = 3
console.log(a == b)
console.log(a === b)
console.log(b === c)
- A: true false true
- B: false false true
- C: true false false
- D: false true true
3、
class Chameleon {
static colorChange(newColor) {
this.newColor = newColor
return this.newColor
}
constructor({ newColor = 'green' } = {}) {
this.newColor = newColor
}
}
const freddie = new Chameleon({ newColor: 'purple' })
freddie.colorChange('orange')
- A: orange
- B: purple
- C: green
- D: TypeError
4、
function bark() {
console.log('Woof!')
}
bark.animal = 'dog'
- A: 正常运行!
- B: SyntaxError. 你不能通过这种方式给函数增加属性。
- C: undefined
- D: ReferenceError
5、
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
const member = new Person("Lydia", "Hallie");
Person.getFullName = function () {
return `${this.firstName} ${this.lastName}`;
}
console.log(member.getFullName());
- A: TypeError
- B: SyntaxError
- C: Lydia Hallie
- D: undefined undefined
答案和解答
知识点:浅克隆 和 深克隆
1、A
c只是把地址赋值给了d,d和c共同指向内存中的{ greeting:“Hey!”}
2、D
== 只比较值是否相等;===比较值和类型,必须同时满足
a 和 c 和=肯定一样,是数字3同时类型是Number.
b是new Number()出来的结果,它的值为3,和a、c相等;它的类型是:Number{3},是Number对象的形式。所以类型上和其他两项不同.
3、D
知识点:ES6中类的静态方法=> static 的使用
静态的就是不会被实例继承的,是属于类自身的,实例继承不了,也调用不了,跟作用域一样。实例成员无法访问静态方法,继承可以。
4、A
函数是对象的子类这样定义相当于是静态属性,函数也是对象,可以添加属性。
5、A
1,从js原型链角度看,getFullName是Person这个function变量的一个属性,而member是new出来的对象,其__proto__属性是Person.prototype。
调用member的getFullName方法,先从member身上找,找不到就去member.__proto__也就是Person.prototype上去找,然而找不到。
2,从java这种面向对象的角度看,getFullName是Person类的静态方法,属类所有,不属于对象,而通过类的对象调用,则无法调用。(java和js不完全一样,java中的对象可以调用静态方法不报错,而js中是完全不能调用,会报错)