106. 输出什么?
const colorConfig = {
red: true,
blue: false,
green: true,
black: true,
yellow: false,
}
const colors = ["pink", "red", "blue"]
console.log(colorConfig.colors[1])
答:D,JS通过点访问对象属性的时候,会把colors当做一个属性,发现找不到为undefined,然后调用[1]会报错。
107. 输出什么?
console.log('❤️' === '❤️')
答:A,显然这两个字面量是相等的。
108. 那些方法修改了原数组?
const emojis = ['✨', '????', '????']
emojis.map(x => x + '✨')
emojis.filter(x => x !== '????')
emojis.find(x => x !== '????')
emojis.reduce((acc, cur) => acc + '✨')
emojis.slice(1, 2, '✨')
emojis.splice(1, 2, '✨')
答:map,filter,slice返回的是新数组,find返回的是数组中的某个元素,reduce返回的是一个值,只有splice是对原数组产生了更改。
109. 输出什么?
const food = ['????', '????', '????', '????']
const info = { favoriteFood: food[0] }
info.favoriteFood = '????'
console.log(food)
答:A,上述代码只是修改了info中的值,并未对food对象产生任何影响。
110. 下面的函数干了什么?
JSON.parse()
答:A,这个题就看我们对JS中常用API的了解程度了,就是将JSON字符串转换为对应的JavaScript值。
111. 输出什么?
let name = 'Lydia'
function getName() {
console.log(name)
let name = 'Sarah'
}
getName()
答:D,本题中let存在变量声明的提升,但是并未进行初始化,此时存在暂时性死区,在暂时性死区中调用let定义的变量会报错,所以选D。
112. 输出什么?
function* generatorOne() {
yield ['a', 'b', 'c'];
}
function* generatorTwo() {
yield* ['a', 'b', 'c'];
}
const one = generatorOne()
const two = generatorTwo()
console.log(one.next().value)
console.log(two.next().value)
答:C,本题中的两个函数猛一看没区别,实际上第二个函数多了一个*号,所以调用第二个函数的next().value返回的其实是一个元素,所以本题选C。
113. 输出什么?
console.log(`${(x => x)('I love')} to program`)
答:A,本题的模板字符串大括号中是一个立即执行函数,所以打印的结果是A。
114. 下面的函数将会发生什么?
let config = {
alert: setInterval(() => {
console.log('Alert!')
}, 1000)
}
config = null
答:C,这是因为循环定时器中的参数是一个箭头函数,箭头函数中的上下文绑定到config了,通过赋值为null,回调函数仍然保留着对config的引用,所以循环定时器不会停止,仍然是每隔1秒继续打印,可以通过clear的方式取消掉这个循环定时器。
115. 下面哪一个方法会返回’Hello World!’?
const myMap = new Map()
const myFunc = () => 'greeting'
myMap.set(myFunc, 'Hello world!')
//1
myMap.get('greeting')
//2
myMap.get(myFunc)
//3
myMap.get(() => 'greeting')
答:B,首先我们要明确一点,Map中值为Hello world!的键是myFunc的地址引用,1,2,3中只有第二个键是myFunc的地址引用,3是一个新地址,所以选B。
题目来源
https://github.com/lydiahallie/javascript-questions