文章目录
题1 (块级作用域, Reference)
下面输出的是
function checkAge(age) {
if (age < 18) {
const message = 'Sorry, you are too young';
} else {
const message = 'Yay, you are old enough';
}
return message;
}
console.log(checkAge(21));
答案:ReferenceError
这道题主要考察:
- const和let 声明的变量是具有块级作用域的,块是大括号({})之间的任何东西,由于块级作用域,我们无法在声明的块之外引入变量
- 这道题有个注意的是,因为是块级作用域,没有变量提升,调用未声明的变量并不会反悔undefined,而是报Reference错误
- ReferenceError(引用错误) 对象代表当一个不存在的变量被引用时发生的错误。
题2 (扩展符,箭头函数)
下面输出的是
const getList = ([x, ...y]) => [x, y]
const getUser = user => {name: user.name, age: user.age}
const list = [1, 2, 3, 4]
const user = {name: 'Lydia', age: 21}
console.log(getList(list))
console.log(getUser(user))
答案:[1, [2, 3, 4]] , undefined
这道题主要考察:
- 扩展符,这里y使用了扩展符,代表序列,也就是2,3,4, 所以getList的返回值是[1, [2, 3, 4]]
- 对于箭头函数,如果只返回一个值,我们不必写花括号,但是如果想要从一个箭头函数返回一个对象,必须在圆括号中编写它,不然就不会返回任何值,例如:
const getUser = user => ({name: user.name, age: user.age})
题3 (JSON.stringify)
下面输出的是
const settings = {
username: 'lydiahallie',
level: 19,
health: 90
}
const data = JSON.stringify(settings, ['level', 'health'])
console.log(data)
答案:“{“level”: 19, “health”: 90}"
这道题主要考察:
- JSON.stringify的第二个参数是替代者,替代者可以是个函数或数组,用以控制哪些值如何被转换为字符串,如果替代者是个数组,那么就只有包含在数组的属性将会被转化为字符串。如果替代者是一个函数,这个函数将被对象的每个属性都调用一遍。函数返回的值将会成为这个属性的值
题4(Boolean)
下面输出的是:
const one = (false || {} || null)
const two = (null || false || '')
const three = ([] || 0 || true)
console.log(one, two, three)
答案:{} “” []
这道题主要考察:
- js中的假值只有6个,false,undefined,null,0,""(空字符串),NaN。除此之外的所有值,都是“真值”,即在逻辑判断中可以当true来使用
题6 (模版字符串)
下面输出的是:
function sayHi(name) {
return 'Hi there, ${name}`
}
console.log(sayHi())
答案:Hi there, undefined
这道题主要考察:
- undefined和字符串拼接的时候,会加上undefined被打印
题8 (暂时性死区)
下面输出的是:
let name = 'Lydia'
function getName() {
console.log(name)
let name = 'Sarah'
}
getName()
答案:ReferenceError
这道题主要考察:
- 带let关键字和const关键字的变量不存在变量提升,与var不同,并不会被初始化。在我们声明他们之前,无法访问,这称为“暂时性死区”, 在我们尝试声明变量之前访问变量时,javaScript会抛出ReferenceError
题10 (yield)
下面输出的是
async function* range(start, end) {
for (let i = start, i <= end; i++) {
yield Promise.resolve(i);
}
}
(async () => {
const gen = range(1, 3);
for await(const item of gen) {
console.log(item);
}
}
答案:1 2 3
这道题主要考察:
- yield:yield* 表达式用于委托给另一个generator 或可迭代对象, range函数返回一个包含着Promise{1}, Promise{2}, Promise{3}的迭代器,然后用for await输出迭代器的异步结果,也就是三个resolve的结果,即为1 2 3
小伙伴们今天的学习就到这里了,如果觉得本文对你有帮助的话,欢迎转发,评论,收藏,点赞!!!
每天学习进步一点点,就是领先的开始。如果想继续提高,欢迎关注我,或者关注公众号”祯民讲前端“。大量前端技术文章,面试资料,技巧等助你更进一步!