分享9个让人迷惑的前端面试题(中)

43321df35d980141da520051a00a80a9.jpeg

大家好,今天我继续给大家分享8个让人有点迷惑的前端面试题,有些题会有解释,有些不太好解释,主要有点怪异,也不会这样写,也不知道怎么解释,欢迎大家在评论区完善,通过这些面试题,可以帮我梳理前端相关的知识盲点。

问题11,函数的 .length 属性

754f4be0967c452d6958cd721c3ed494.jpeg

答案 :

2
2

函数的 .length 属性打印函数期望的参数长度。

如果有任何可选参数,那么之后的所有参数都将被视为可选参数,无论我们是否声明它们是可选的。因此 ,如果是可选参数,在最后包含可选参数始终是一个好习惯。

问题12,static function 中的 This 输出啥

this 在静态函数中的值是什么?

2b7e399b464da5ee73cb917dfd6a02e6.jpeg

答案:

// Output
class Test { 
   constructor(lang) {    
      this.lang  = lang; 
   }  
  static showName() {    
    console.log(this, this.lang); 
  } 
}

静态函数中 this 的值是类本身。

当我们在静态方法中使用This,整个类的信息将会输出。

问题13,控制台会打印什么?

76a068326d5e340839f0070ab1bb8997.jpeg

答案:

true
true
true
false

问题14,如何检查对象的值是否为对象?

答案:

0248bd6fae1d34ef91e0de5b5cf3bb57.jpeg

这里你需要注意加上null的验证,因为null的类型是object。

延伸阅读

在 JavaScript 中,typeof null 也会返回 "object",这是一个锅。针对这个问题,你还可以使用另一种方法来检查一个变量是否是对象,例如使用Object.prototype.toString.call(obj) 或者 Object.prototype.toString.apply(obj) 如果是对象会返回 "[object Object]"

const x = {};
console.log(Object.prototype.toString.call(x) === "[object Object]")  // true

const y = null;
console.log(Object.prototype.toString.call(y) === "[object Object]")  // false

或者使用 instanceof 操作符来检查一个变量是否是 Object 类的实例。

const x = {};
console.log(x instanceof Object) // true

const y = null;
console.log(y instanceof Object) //false

问题15

9976dbc1b5cb7e518326807c484d6880.jpeg

Hello
How
HelloHow are you?

问题16

44a41f7162f7b28ded25a78e9426bb9e.jpeg

答案:

4,5,6,3,4,5

当我们在数组中执行 .toString() 时,如果它包含原始值,它会将其中的元素字符串化。而 toString() 也将数组展平。

问题17

事件的三个阶段是什么?按照它们出现的顺序写下来。

答案:

1. Capturing phase – the event goes down to the element.2. Target phase – the event reached the target element.3. Bubbling phase – the event bubbles up from the element.

  1. 捕获阶段——事件深入到元素。

  2. 目标阶段——事件到达目标元素。

  3. 冒泡阶段——事件从元素中冒出来。

问题18

5552c8465fb3510e5053c9ab2904ca46.jpeg

答案:

obj.showLang() will print undefined
x.showLang() will print Vue

首先,这段代码创建了一个名为 "obj" 的对象,其中有一个属性 "lang" 和一个方法 "showLang"。在 "showLang" 方法中,使用了 "console.log(this.lang)" 来输出对象的 "lang" 属性。

使用"=>" 箭头函数 定义函数,这种类型的函数会有一个特殊的语法特性,就是箭头函数中的 this 关键字会绑定到其所在的上下文中,这里的上下文是全局对象,所以 this 指的是全局对象。而在全局对象中并没有定义 lang 属性,所以输出的结果是 undefined。

如果把 "showLang" 中的箭头函数换成普通函数,就会得到正确的结果,因为普通函数中的 this 会绑定到调用它的对象上。

如果想在箭头函数中使用对象本身的属性,可以将对象本身赋给一个变量,如下:

const obj = {
  lang: 'react',
  showLang: () => {
    const self = obj;
    console.log(self.lang);
  }
}
obj.showLang();  // react

问题19

ffd63f50adcf26e54db54ac55d19b6fa.jpeg

答案:

1
1
2
undefined

Promise.resolve(1) 和 Promise.resolve(2) 分别创建了一个已经完成的 promise,它们的值分别为 1 和 2。

第一个 p1.then(console.log) 调用会将值 1 传递给 console.log 函数并打印出来。第二个 p1.then(console.log) 调用会再次将值 1 传递给 console.log 函数并打印出来。

第一个 p2.then(console.log) 调用会将值 2 传递给 console.log 函数并打印出来。第二个 p2.then(console.log) 调用并不会再次将值 2 传递给 console.log 函数并打印出来,因为第二个 then 方法返回的是一个新的 promise,并没有指定回调函数,所以输出了 undefined.

结束

今天的分享就到这里,你是如何理解这些问题的?欢迎大家在评论区交流,希望今天的分享对大家有所帮助,感谢你的阅读,如果你喜欢我的分享,别忘了点赞转发,让更多的人看到,最后别忘记点个关注,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。

推荐阅读

JS小知识,分享一些让我迷惑的前端面试题1~10(上)

原文:
https://rahuulmiishra.medium.com/javascript-interview-questions-that-made-me-think-do-i-really-know-javascript-part-2-cfc5f2c919c5

非直接翻译,有自行改编和添加部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值