JavaScript三元运算符和JSLint中的表达式
最近,我在一篇关于JSLint的博客文章中收到一条评论,问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:好的部
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:您编写的表达式有直接的副作用,这被认为是不好的。
您能澄清一下吗?什么是即时副作用?尽管如此,回答还是很好!