不确定这个问题是因为jsFiddle中的错误还是我对javascript圆括号的误解。我有这段代码:
let x = 5
(x > 0) && console.log('hello')
这不起作用。但是,以下没有括号可以工作。
x > 0 && console.log('hello')
我的印象是我可以在条件中使用圆括号将事物分组在一起。我不知道为什么我的第一行代码不起作用。这是我对圆括号的误解吗?
我实际上是想在这个jsFiddle代码中教别人一个更高级的例子。 https://jsfiddle.net/x616atk0/
答案 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
更好。