来源:
javascript-questions/zh-CN/README-zh_CN.md at master · lydiahallie/javascript-questions · GitHub
记录一些有趣的题。
系列:
【前端】35道JavaScript进阶问题(1)
【前端】20道JavaScript进阶问题(2)
1
const info = {
[Symbol('a')]: 'b'
}
console.log(info)
console.log(Object.keys(info))
答:
{
[Symbol(a)]: 'b' }
[]
第一个 console.log(info)
语句打印出整个对象,包括符号键。然而,第二个 console.log(Object.keys(info))
语句返回一个空数组,因为 Object.keys()
只返回可枚举属性的名称作为一个字符串数组,它不包括 Symbol
属性。
如果你想获取用作对象键的符号,你可以使用 Object.getOwnPropertySymbols()
。
console.log(Object.getOwnPropertySymbols(info))
[ Symbol('a') ]
2
const output = `${
[] && 'Im'}possible!
You should${
'' && `n't`} see a therapist after so much JavaScript lol`
答:
Impossible!
You should see a therapist after so much JavaScript lol
解析:
[]
是一个真值。使用&&
运算符,如果左侧值是真值,则返回右侧值。在这种情况下,左侧值[]
是一个真值,所以返回Im
。
""
是一个假值。如果左侧值是假的,则不返回任何内容。n't
不会被退回。
使用
||
运算符,我们可以返回第一个真值。如果所有值都是假值,则返回最后一个值。
3
Promise.resolve(5)
答:
Promise {<fulfilled>: 5}
4
function compareMembers(person1, person2 = person) {
if (person1 !== person2) {
console.log("Not the same!")
} else {
console.log("They are the same!")
}
}
const person = {
name: "Lydia" }
compareMembers(person)
答:
They are the same!
解析:
使用同一个引用person
。
5
const colorConfig = {
red: true,
blue: false,
green: true,
black: true,
yellow: false,
}
const colors = ["pink", "red", "blue"]
console.log(colorConfig.colors[1])
答:
TypeError
解析:
colorConfig.colors
是undefined,undefined[1]
会报错。