分享
三行代码  ›  专栏  ›  技术社区  ›  Louis Cowell

JavaScript-为什么在三元表达式中包含括号会导致错误?

  •  4
  • Louis Cowell  · 技术社区  · 1 周前

    我有以下代码:

    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 = {... ,我不清楚为什么会这样。

    let price = 20
    
    (price < 10) ? showMessage('yes') : showMessage('no')
    

    然而,当我在自己的机器上尝试时,同样的问题发生了。他们会使用行为不同的旧版JavaScript吗?如果是这样,有什么变化?

    1 回复  |  直到 1 周前
        1
  •  5
  •   Anthony Gedeon    1 周前

    JavaScript的分号插入

    下面是JavaScript引擎如何查看您的代码

    let person = {...}(person.firstTime === true ? )
    

    console.log('Error')
    
    [1, 2, 3].forEach(console.log)
    

    但是如果最后有分号控制台.log('Error')则以下代码将正常工作

    重要的是,不要依赖JavaScript分号插入,否则会出现奇怪的错误。