分享几道面试遇到的问题(一)

1. console.log(${(x=>x)('I love ')} to program)

A、 I love to program

B、undefined to program

C、${(x=>x)('I love ')} to program

D、 TypeError

2. const name = 'Livall'    console.log(name())

A、 SyntaxError

B、 ReferenceError

C、 TypeError

D、 undefined

3. const colorConfig = {         

    red:true,

    blue:false,

    green:true,

    black:true,

    yellow:false

}

const colors = ['pink','red','blue']

console.log(colorConfig.colors[1])

  A、 true       

  B、 false       

  C、 undefined       

  D、 TypeError

4.使用那个构造函数可以成功继承Dog类

  class Dog {

    constructor(name){

        this.name = name;

    }

};       

class Labrador extends Dog {

  //1

  constructor (name,size){

    this.size = size;

  }   

  //2 

  constructor(name,size){

    super(name);

    this.size = size;

  }   

  //3   

  constructor(size){

    super(name);

    this.size = size;

  }   

  //4

  constructor(){

    this.name = name;

    this.size = size;

  }

}

A、 1

B、 2 

C、 3 

D、 4

5.console.log([[0,1],[2,3]].reduce(`

    (acc,cur) =>{

        return acc.concat(cur);

    },[1,2])

)

A、 [0,1,2,3,1,2]

B、 [6,1,2]

C、 [1,2,0,1,2,3]

D、 [1,2,6]

参考答案

1.带有模版字面量的表达式首先被执行。相当于字符串会包含表达式,这个立即执行函数(x=>x)('I love')返回的值,我们向箭头函数 x=>x 传递"I love”作为参数。x等价于返回的"I love " ,结果就是"I love to program"

2.变量name保存字符串的值,该字符串不是函数,因此无法调用。当值不是预期类型时,会抛出TypeErrors。JavaScript 期望name是一个函数,因为我们试图调用它。但它是一个字符串,因此抛出TypeError:name is not a function

3.JavaScript 尝试在colorConfig 对象上找到名为colors的属性,找不到名为“colors” 的属性,因此返回“undefined” ,然后,尝试使用[1]访问第一个元素的值,我们无法对为定义的值执行此操作,因此会抛出“can not read property '1' of undefined”

4.在子类中,在调用super 之前不能访问到this关键字,如果这样做,它将会抛出一个ReferenceError:"``1" 和"4" 将会引发一个引用错误。使用super 关键字,需要用给定的参数来调用父类的构造函数,父类的构造函数接收name 参数,因此我们需要将name传递给super。Labrador 类接收两个参数,那么参数是由于它继承了Dog,size 作为Labrador l类的额外属性,它们都需要传递给Labrador的构造函数,因此使用构造函数2正确完成。

5.[1,2]是初始值,是开始执行reduce 函数的初始值,以及第一个acc的值,在第一轮中,acc是[1,2],cur 是[0,1] ,连起来的结果是[1,2,0,1] 。然后acc的值是[1,2,0,1],cur的值为[2,3],连起来就得到[1,2,0,1,2,3]。

你可能感兴趣的:(分享几道面试遇到的问题(一))