首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript三元算子和JSLint中的表达式

JavaScript三元算子和JSLint中的表达式
EN

Stack Overflow用户
提问于 2011-06-06 07:26:15
回答 1查看 9.2K关注 0票数 24

最近,我在一篇关于JSLint的博客文章中收到了一条评论,询问为什么JSLint在以下几个方面出现了错误:

代码语言:javascript
复制
s === "test" ? MyFunc() : MyFunc2();

产生的错误是:

“期望一个赋值或函数调用,而不是看到一个表达式。”

显然,JSLint在这里期待着一项任务,有些更像是:

代码语言:javascript
复制
var y = (s === "test") ? MyFunc() : MyFunc2();

但是,我并不认为第一个例子有什么问题。三元操作符应该只用于赋值的情况真的是这样吗?

我在JSLint.com上看不到任何东西,在“JavaScript:美好的部分”一书中也没有什么明显的东西。而且,社区叉JSHint中也报告了同样的错误。

有没有人?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-06 07:31:22

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

0 === 1;

你正在写一个表达式,它有直接的副作用,被认为是不好的。

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

代码语言:javascript
复制
if (s === "test") {
  MyFunc();
} else {
  MyFunc2();
}

除此之外,它的语法也是完全可靠的。我个人认为写一个简洁的三元替代if是不好的,你最好只在分配时使用它。

(Ab)用于简洁的其他短手表达。

代码语言:javascript
复制
someCondition && doMagic(magic);
someCondition || doMagic(magic);

同样,如果只使用它们作为表达式,这些都被认为是不好的形式,因为使用这些表达式只会模糊逻辑,使维护代码变得更加困难。

JSHint有一个选项expr。请参阅票证

跑步:

代码语言:javascript
复制
/*jshint
  expr: true
*/

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

会过去

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6248920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档