如何解决JavaScript-为什么包含括号会导致三元表达式出错?
我有以下代码:
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`,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的分号插入
这是JavaScript引擎如何查看您的代码
let person = {...}(person.firstTime === true ? )
以下内容也会出现相同的问题
console.log('Error')
[1,2,3].forEach(console.log)
但是,如果console.log('Error')末尾有分号,则以下代码将正常工作
本质,不依赖于JavaScript分号插入,否则您将得到奇怪的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。