最近,我在一篇关于JSLint的博客文章中收到了一条评论,询问为什么JSLint在以下几个方面出现了错误:
s === "test" ? MyFunc() : MyFunc2();产生的错误是:
“期望一个赋值或函数调用,而不是看到一个表达式。”
显然,JSLint在这里期待着一项任务,有些更像是:
var y = (s === "test") ? MyFunc() : MyFunc2();但是,我并不认为第一个例子有什么问题。三元操作符应该只用于赋值的情况真的是这样吗?
我在JSLint.com上看不到任何东西,在“JavaScript:美好的部分”一书中也没有什么明显的东西。而且,社区叉JSHint中也报告了同样的错误。
有没有人?
发布于 2011-06-06 07:31:22
这是一种表达。这相当于写作
0 === 1;
你正在写一个表达式,它有直接的副作用,被认为是不好的。
一般来说,表达式是无用的语句,没有副作用。它被认为是更好的形式
if (s === "test") {
MyFunc();
} else {
MyFunc2();
}除此之外,它的语法也是完全可靠的。我个人认为写一个简洁的三元替代if是不好的,你最好只在分配时使用它。
(Ab)用于简洁的其他短手表达。
someCondition && doMagic(magic);
someCondition || doMagic(magic);同样,如果只使用它们作为表达式,这些都被认为是不好的形式,因为使用这些表达式只会模糊逻辑,使维护代码变得更加困难。
JSHint有一个选项expr。请参阅票证
跑步:
/*jshint
expr: true
*/
var s, MyFunc, MyFunc2;
s === "test" ? MyFunc() : MyFunc2();
0 === 1;会过去
https://stackoverflow.com/questions/6248920
复制相似问题