1、下面代码的输出是什么?
function checkAge(age) {
if (age < 18) {
const message = "Sorry, you're too young."
} else {
const message = "Yay! You're old enough!"
}
return message
}
console.log(checkAge(21))
-
A:
"Sorry, you're too young."
-
B:
"Yay! You're old enough!"
-
C:
ReferenceError
-
D:
undefined
答案: C
const
和let
声明的变量是具有块级作用域的,块是大括号({}
)之间的任何东西, 即上述情况if/else
语句的花括号。由于块级作用域,我们无法在声明的块之外引用变量,因此抛出ReferenceError
。
2、什么样的信息将被打印?
fetch('https://www.website.com/api/user/1')
.then(res => res.json())
.then(res => console.log(res))
-
A:
fetch
方法的结果 -
B: 第二次调用
fetch
方法的结果 -
C: 前一个
.then()
中回调方法返回的结果 -
D: 总是
undefined
答案: C
第二个
.then
中res
的值等于前一个.then
中的回调函数返回的值。你可以像这样继续链接.then
,将值传递给下一个处理程序。
3、下面代码输出什么?
let newList = [1, 2, 3].push(4)
console.log(newList.push(5))
-
A:
[1,2,3,4,5]
-
B:
[1,2,3,5]
-
C:
[1,2,3,4]
-
D:
Error
答案: D
.push
方法返回数组的长度,而不是数组本身!通过将newList
设置为[1,2,3].push(4)
,实际上newList
等于数组的新长度:4
。然后,尝试在
newList
上使用.push
方法。由于newList
是数值4
,抛出TypeError。
4、下面代码输出什么?
function giveLydiaPizza() {
return "Here is pizza!"
}
const giveLydiaChocolate = () => "Here's chocolate... now go hit the gym already."
console.log(giveLydiaPizza.prototype)
console.log(giveLydiaChocolate.prototype)
-
A:
{constructor:...}
{constructor:...}
-
B:
{}
{constructor:...}
-
C:
{constructor:...}
{}
-
D:
{constructor:...}
undefined
答案: D
常规函数,例如
giveLydiaPizza
函数,有一个prototype
属性,它是一个带有constructor
属性的对象(原型对象)。然而,箭头函数,例如giveLydiaChocolate
函数,没有这个prototype
属性。尝试使用giveLydiaChocolate.prototype
访问prototype
属性时会返回undefined
。
5、下面代码输出什么?
function getItems(fruitList, ...args, favoriteFruit) {
return [...fruitList, ...args, favoriteFruit]
}
getItems(["banana", "apple"], "pear", "orange")
-
A:
["banana","apple","pear","orange"]
-
B:
[["banana","apple"],"pear","orange"]
-
C:
["banana","apple",["pear"],"orange"]
-
D:
SyntaxError
答案: D
...args
是剩余参数,剩余参数的值是一个包含所有剩余参数的数组,并且只能作为最后一个参数。上述示例中,剩余参数是第二个参数,这是不可能的,并会抛出语法错误。
6、下面代码输出什么?
const info = {
[Symbol('a')]: 'b'
}
console.log(info)
console.log(Object.keys(info))
-
A:
{Symbol('a'):'b'}
and["{Symbol('a')"]
-
B:
{}
and[]
-
C:
{a:"b"}
and["a"]
-
D:
{Symbol('a'):'b'}
and[]
答案: D
Symbol
类型是不可枚举的。Object.keys
方法返回对象上的所有可枚举的键属性。Symbol
类型是不可见的,并返回一个空数组。记录整个对象时,所有属性都是可见的,甚至是不可枚举的属性。这是
Symbol
的众多特性之一:除了表示完全唯一的值(防止对象意外名称冲突,例如当使用2个想要向同一对象添加属性的库时),您还可以隐藏
这种方式对象的属性(尽管不完全。你仍然可以使用Object.getOwnPropertySymbols()
方法访问Symbol
。