jsFiddle中逻辑运算符中的圆括号

时间:2018-04-23 23:07:37

标签: javascript conditional-statements jsfiddle

不确定这个问题是因为jsFiddle中的错误还是我对javascript圆括号的误解。我有这段代码:

let x = 5
(x > 0) && console.log('hello')

这不起作用。但是,以下没有括号可以工作。

x > 0 && console.log('hello')

我的印象是我可以在条件中使用圆括号将事物分组在一起。我不知道为什么我的第一行代码不起作用。这是我对圆括号的误解吗?

我实际上是想在这个jsFiddle代码中教别人一个更高级的例子。 https://jsfiddle.net/x616atk0/

2 个答案:

答案 0 :(得分:7)

它不起作用,因为您在let x = 5

之后缺少分号

代码应为:

let x = 5;
(x > 0) && console.log('hello');

否则,您的代码可以转换为:

let x = 5(x > 0) && console.log('hello');

当然5不是函数,x(你在表达式中使用的,其中评估值将作为参数传递)尚未定义。

该错误具有误导性,因为您使用的是您定义为参数的相同变量。如果你有

let x = 5
(5 > 0) && console.log('hello');

你会得到:TypeError: 5 is not a function这正是问题所在。

这就是分号很重要的原因!

Do you recommend using semicolons after every statement in JavaScript?

是的,我绝对

答案 1 :(得分:3)

您忘记在行尾添加分号,这会导致错误。当你这样做时:

argv[i]

因为第三行以let x = 5 let y = 4 x > 0 && console.log('code 4') (x > 0) && (y > 0) && console.log('code 5'); 结尾,解释器认为您使用)参数调用console.log的结果:

(x > 0)

但是let x = 5 let y = 4 x > 0 && console.log('code 4')(x > 0) && (y > 0) && console.log('code 5'); 会返回console.log:它不会返回一个函数,所以当然你不能将它称为函数。

如果您仍在学习该语言,请始终使用分号,否则您可以轻松绊倒自己。

另外,你正在做的事情是一种好的做事方式;虽然它是一个有趣的语言怪癖,但使用undefined或三元运算符明确测试条件比使用if更好。