Mic*_*thy 4 javascript conditional-operator operator-precedence
我有以下代码:
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}!`)Run Code Online (Sandbox Code Playgroud)
这导致错误:
home.js:7 Uncaught ReferenceError: Cannot access 'person' before initialization
at home.js:7
Run Code Online (Sandbox Code Playgroud)
但是,在以下情况下(三元表达式中的括号已被删除):
home.js:7 Uncaught ReferenceError: Cannot access 'person' before initialization
at home.js:7
Run Code Online (Sandbox Code Playgroud)
没有错误,欢迎信息显示正确。
为什么会这样?我的印象是括号在三元表达式中是可选的。我想,这是什么做的计算顺序,但由于三元表达式是在不同的线路let person = {...,我不清楚为什么发生这种情况。
事实上,在我正在学习的 JavaScript 课程展示的示例中,讲师展示了以下示例,无论是否带括号都可以完美运行:
let price = 20
(price < 10) ? showMessage('yes') : showMessage('no')
Run Code Online (Sandbox Code Playgroud)
但是,当我在自己的机器上尝试时,出现了同样的问题。他们是否可以使用行为不同的旧版 JavaScript?如果有,发生了什么变化?
非常感谢!
JavaScript 的分号插入
以下是 JavaScript 引擎如何查看您的代码
let person = {...}(person.firstTime === true ? )
Run Code Online (Sandbox Code Playgroud)
以下情况也会出现同样的问题
console.log('Error')
[1, 2, 3].forEach(console.log)
Run Code Online (Sandbox Code Playgroud)
但是如果在console.log('Error')的末尾有一个分号,那么下面的代码就可以正常工作了
必不可少,不要依赖 JavaScript 分号插入,否则你会得到奇怪的错误。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |