当前位置: 首页 > 知识库问答 >
问题:

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

公冶京
2023-03-14

我有以下代码

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}!`)

没有错误,欢迎消息显示正确。

为什么会这样呢?在我的印象中,括号在三元表达式中是可选的。我认为这与求值的顺序有关,但是由于三元表达式在不同的行上,所以< code>let person = {...,我不清楚为什么会发生这种情况。

事实上,在我正在学习的JavaScript课程中,教师展示了下面的例子,无论有没有括号都可以很好地工作:

let price = 20

(price < 10) ? showMessage('yes') : showMessage('no')

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

非常感谢!

共有1个答案

景理
2023-03-14

JavaScript的分号插入

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

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

同样的问题也会发生在下面

console.log('Error')

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

但是如果console.log结尾有分号('Error'),那么下面的代码将正常工作

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

 类似资料:
  • 所以浮点运算是不精确的,但这并不能完全解释这里发生的事情:

  • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

  • 本文向大家介绍你知道什么是三元表达式吗?“三元” 表示什么意思?使用三元表达式应该注意些什么问题?相关面试题,主要包含被问及你知道什么是三元表达式吗?“三元” 表示什么意思?使用三元表达式应该注意些什么问题?时的应答技巧和注意事项,需要的朋友参考一下 避免嵌套三元表达式 条件运算符的优先级是从右向左,因此会从最右侧算起,如果最右侧有嵌套,会从嵌套内的最右侧算起,这样就容易出错

  • 本文向大家介绍为什么float会导致父元素塌陷?相关面试题,主要包含被问及为什么float会导致父元素塌陷?时的应答技巧和注意事项,需要的朋友参考一下 “当元素设置浮动后,会自动脱离文档流”, 翻译成白话就是说,元素浮动后,就不在整个文档流的管辖范围,那么它之前存在在父元素内的高度就随着浮动不复存在了,而此时父元素会默认自己里面没有任何内容 (前提是未给父元素设置固定高度,如果父元素本身有固定高度

  • 对于我的Java类,要求我们在working For语句中添加分号,并解释为什么输出是这样的。我不明白为什么添加分号会产生错误的树类型错误,导致代码无法编译。代码下面是输出;我还向any标记添加了反斜杠,因为它不会以其他方式显示。那么,为什么for语句后面的分号会导致这样的错误呢?提前谢谢。 运行时间:

  • 根据SQL字符串组合文档,我想在postgresql数据库中执行DELETE语句: 这将导致以下错误: 另一方面,类似的execute工作正常: 我真的看不出有什么区别...