文章排行
- 
10个棘手的用于面试的JavaScript代码段 
- 
4种方案详解如何实现准时的setTimeout 
- 
7个提高JavaScript代码质量的优秀实践 
- 
Vue中避免滥用this去读取data中数据 
- 
小程序静默登录方案设计 
- 
记一次高级前端开发工程师面经 
- 
一年半经验的前端面经总结 
最新试题
上周试题
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 关键字,你可以用相同的名称声明多个变量。然后变量将保存最新的值。
你不能使用 let 或 const 来实现这一点,因为它们是块作用域的。
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: falsetruefalsetrue
- 
B: falsetruetruetrue
- 
C: truetruefalsetrue
- 
D: truetruetruetrue
答案: C
所有对象的键(不包括 Symbol)在底层都是字符串,即使你自己没有将其作为字符串输入。这就是为什么 obj.hasOwnProperty('1') 也返回 true。
对于集合,它不是这样工作的。在我们的集合中没有 '1':set.has('1') 返回 false。它有数字类型为 1,set.has(1) 返回 true。
 
 
                     
            
        













 
                    

 
                 
                    