一周热文和最新 JS 进阶面试题 #3

 点击下方“前端开发博客”关注公众号

回复“面试”获取面试精选文章

忙碌的一周过去了,一起来汇总一下前端开发博客最近一周有哪些值得阅读的东西吧。

文章排行

  1. 10个棘手的用于面试的JavaScript代码段

  2. 4种方案详解如何实现准时的setTimeout

  3. 7个提高JavaScript代码质量的优秀实践

  4. Vue中避免滥用this去读取data中数据

  5. 小程序静默登录方案设计

  6. 记一次高级前端开发工程师面经

  7. 一年半经验的前端面经总结

最新试题

上周试题
18. 输出是什么?
function checkAge(data) {
  if (data === { age: 18 }) {
    console.log('You are an adult!')
  } else if (data == { age: 18 }) {
    console.log('You are still an adult.')
  } else {
    console.log(`Hmm.. You don't have an age I guess`)
  }
}

checkAge({ age: 18 })
  • A: You are an adult!

  • B: You are still an adult.

  • C: Hmm.. You don't have an age I guess

答案: C

在测试相等性时,基本类型通过它们的值(value)进行比较,而对象通过它们的引用(reference)进行比较。JavaScript 检查对象是否具有对内存中相同位置的引用。

题目中我们正在比较的两个对象不是同一个引用:作为参数传递的对象引用的内存位置,与用于判断相等的对象所引用的内存位置并不同。

这也是 { age: 18 } === { age: 18 }{ age: 18 } == { age: 18 } 都返回 false 的原因。


19. 输出是什么?
function getAge(...args) {
  console.log(typeof args)
}

getAge(21)
  • A: "number"

  • B: "array"

  • C: "object"

  • D: "NaN"

答案: C

扩展运算符(...args)会返回实参组成的数组。而数组是对象,因此 typeof args 返回 "object"


20. 输出是什么?
function getAge() {
  'use strict'
  age = 21
  console.log(age)
}

getAge()
  • A: 21

  • B: undefined

  • C: ReferenceError

  • D: TypeError

答案: C

使用 "use strict",你可以确保不会意外地声明全局变量。我们从来没有声明变量 age,因为我们使用 "use strict",它将抛出一个引用错误。如果我们不使用 "use strict",它就会工作,因为属性 age 会被添加到全局对象中了。


21. 输出是什么?
const sum = eval('10*10+5')
  • A: 105

  • B: "105"

  • C: TypeError

  • D: "10*10+5"

答案: A

代码以字符串形式传递进来,eval 对其求值。如果它是一个表达式,就像本例中那样,它对表达式求值。表达式是 10 * 10 + 5。这将返回数字 105


22. cool_secret 可访问多长时间?
sessionStorage.setItem('cool_secret', 123)
  • A: 永远,数据不会丢失。

  • B: 当用户关掉标签页时。

  • C: 当用户关掉整个浏览器,而不只是关掉标签页。

  • D: 当用户关闭电脑时。

答案: B

关闭 tab 标签页 后,sessionStorage 存储的数据才会删除。

如果使用 localStorage,那么数据将永远在那里,除非调用了 localStorage.clear()


23. 输出是什么?
var num = 8
var num = 10

console.log(num)
  • A: 8

  • B: 10

  • C: SyntaxError

  • D: ReferenceError

答案: B

使用 var 关键字,你可以用相同的名称声明多个变量。然后变量将保存最新的值。

你不能使用 letconst 来实现这一点,因为它们是块作用域的。


24. 输出是什么?
const obj = { 1: 'a', 2: 'b', 3: 'c' }
const set = new Set([1, 2, 3, 4, 5])

obj.hasOwnProperty('1')
obj.hasOwnProperty(1)
set.has('1')
set.has(1)
  • A: false true false true

  • B: false true true true

  • C: true true false true

  • D: true true true true

答案: C

所有对象的键(不包括 Symbol)在底层都是字符串,即使你自己没有将其作为字符串输入。这就是为什么 obj.hasOwnProperty('1') 也返回 true

对于集合,它不是这样工作的。在我们的集合中没有 '1'set.has('1') 返回 false。它有数字类型为 1set.has(1) 返回 true


好了,以上就是本周的汇总,以后我们每周会汇总一次,相信你会从中找到你喜欢的内容,最后,记得点个在看,转发文章,关注一下我哦。

整理不易,点个“在看”,支持我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值