JavaScript - 为什么包含括号会导致三元表达式出错?
JavaScript - why does inclusion of parenthesis result in an error in ternary expression?
我有以下代码:
const showMessage = msg => console.log(msg);
let person = {
firstName: `Mick`,
lastName: `McCarthy`,
firstTimeUser: true
}
(person.firstTimeUser === true) ? showMessage(`Welcome, ${person.firstName}!`): showMessage(`Glad you're back, ${person.firstName}!`)
这会导致错误:
home.js:7 Uncaught ReferenceError: Cannot access 'person' before initialization
at home.js:7
但是,在以下情况下(三元表达式中的括号已被删除):
const showMessage = msg => console.log(msg);
let person = {
firstName: `Mick`,
lastName: `McCarthy`,
firstTimeUser: true
}
person.firstTimeUser === true ? showMessage(`Welcome, ${person.firstName}!`) : showMessage(`Glad you're back, ${person.firstName}!`)
没有错误,欢迎信息显示正确。
为什么会这样?我的印象是括号在三元表达式中是可选的。我想它是 某事 与评估顺序有关,但由于三元表达式与 let person = {...
在不同的行上,我不清楚为什么会这样。
事实上,在我正在学习的 JavaScript 课程所展示的示例中,讲师展示了以下示例,无论是否使用括号都可以完美运行:
let price = 20
(price < 10) ? showMessage('yes') : showMessage('no')
但是当我在自己的机器上尝试时,出现了同样的问题。他们可以使用行为不同的旧版本 JavaScript 吗?如果有,发生了什么变化?
非常感谢!
JavaScript的semi-colon插入
下面是 JavaScript 引擎如何查看您的代码
let person = {...}(person.firstTime === true ? )
以下也会出现同样的问题
console.log('Error')
[1, 2, 3].forEach(console.log)
但是如果console.log('Error')末尾有一个分号那么下面的代码就可以正常运行了
必备,不要依赖JavaScript semi-colon 插入,否则会出现奇怪的错误。
我有以下代码:
const showMessage = msg => console.log(msg);
let person = {
firstName: `Mick`,
lastName: `McCarthy`,
firstTimeUser: true
}
(person.firstTimeUser === true) ? showMessage(`Welcome, ${person.firstName}!`): showMessage(`Glad you're back, ${person.firstName}!`)
这会导致错误:
home.js:7 Uncaught ReferenceError: Cannot access 'person' before initialization
at home.js:7
但是,在以下情况下(三元表达式中的括号已被删除):
const showMessage = msg => console.log(msg);
let person = {
firstName: `Mick`,
lastName: `McCarthy`,
firstTimeUser: true
}
person.firstTimeUser === true ? showMessage(`Welcome, ${person.firstName}!`) : showMessage(`Glad you're back, ${person.firstName}!`)
没有错误,欢迎信息显示正确。
为什么会这样?我的印象是括号在三元表达式中是可选的。我想它是 某事 与评估顺序有关,但由于三元表达式与 let person = {...
在不同的行上,我不清楚为什么会这样。
事实上,在我正在学习的 JavaScript 课程所展示的示例中,讲师展示了以下示例,无论是否使用括号都可以完美运行:
let price = 20
(price < 10) ? showMessage('yes') : showMessage('no')
但是当我在自己的机器上尝试时,出现了同样的问题。他们可以使用行为不同的旧版本 JavaScript 吗?如果有,发生了什么变化?
非常感谢!
JavaScript的semi-colon插入
下面是 JavaScript 引擎如何查看您的代码
let person = {...}(person.firstTime === true ? )
以下也会出现同样的问题
console.log('Error')
[1, 2, 3].forEach(console.log)
但是如果console.log('Error')末尾有一个分号那么下面的代码就可以正常运行了
必备,不要依赖JavaScript semi-colon 插入,否则会出现奇怪的错误。