JavaScript三元运算符和JSLint中的表达式

JavaScript三元运算符和JSLint中的表达式,javascript,ternary-operator,jslint,jshint,Javascript,Ternary Operator,Jslint,Jshint,最近,我在一篇关于JSLint的博客文章中收到一条评论,问JSLint为什么会抛出以下错误: s === "test" ? MyFunc() : MyFunc2(); 生成的错误是: “预期的任务或功能 打电话时,他看到了一个表情。” 显然,JSLint在这里期待一个任务,比如: var y = (s === "test") ? MyFunc() : MyFunc2(); 但是,我并不认为第一个例子有什么问题。三元运算符真的应该只用于赋值吗 我看不到任何东西,在《JavaScript:好的部

最近,我在一篇关于JSLint的博客文章中收到一条评论,问JSLint为什么会抛出以下错误:

s === "test" ? MyFunc() : MyFunc2();
生成的错误是:

“预期的任务或功能 打电话时,他看到了一个表情。”

显然,JSLint在这里期待一个任务,比如:

var y = (s === "test") ? MyFunc() : MyFunc2();
但是,我并不认为第一个例子有什么问题。三元运算符真的应该只用于赋值吗

我看不到任何东西,在《JavaScript:好的部分》一书中也没有任何明显的内容。而且,社区fork中也报告了相同的错误


有人吗?

这是一种表达。这相当于写作

0==1

你正在写一个有即时副作用的表达,这被认为是不好的

一般来说,表达式是没有副作用的无用语句。这被认为是更好的形式,简单地做

if (s === "test") {
  MyFunc();
} else {
  MyFunc2();
}
除此之外,它的语法非常可靠。我个人确实同意,如果写一个简短的三元组作为
的替代品是不好的,你最好只在作业中使用它

(ab)用于简洁的其他速记表达

someCondition && doMagic(magic);
someCondition || doMagic(magic);
同样,如果它们仅用作表达式,则它们被视为不好的形式,因为使用它们只会模糊逻辑,使代码维护变得更加困难

JSHint为此提供了一个选项
expr
。看

运行:

/*jshint
  expr: true
*/

var s, MyFunc, MyFunc2;
s === "test" ? MyFunc() : MyFunc2();
0 === 1;

将通过

+1获得强大的雷诺斯的回答。我必须承认,我有时使用速记表达式而不是
if
语句。但很少是三元的,通常类似于
match&&doSomethingWith(match)
。但这仅仅是因为我懒惰:P总的来说,我确实认为当个人偏好起作用时,JSLint抱怨的一些事情你可以忽略。@Andy E:我意识到JSLint的某些部分确实是个人偏好起作用的,但我也有兴趣看到JSHint所反映的同样的信息。不过,知道总是好的。@jameswisemanjshint允许您进行大量定制。有一个
expr
选项来抑制这些警告。在我看来,简单的
|
&&
使用起来很好,但我能理解为什么它们可能不好。现在有了吗?有趣。感谢您的回复:-)@Raynos:
您编写的表达式有直接的副作用,这被认为是不好的。
您能澄清一下吗?什么是即时副作用?尽管如此,回答还是很好!