JSLint 和使用三元表达式赋值

Posted

技术标签:

【中文标题】JSLint 和使用三元表达式赋值【英文标题】:JSLint and assigning values with ternary expressions 【发布时间】:2019-09-03 04:02:00 【问题描述】:

这只是一个示例,但是对于使用三元表达式的以下赋值,我无法让它通过 JSLint test。

我也不能让它忽略它。

var size = settings.size ? settings.size : defaults.size;

错误信息是 "用括号包裹一个三元表达式,在左括号后换行。"

我找不到的是一种使用括号的方法,并且作业仍然有效。

鉴于其中大约有 10 个,JSLint 并没有完成,而是进入我想要检查的真正重要的东西。

【问题讨论】:

你也可以通过 var size = settings.size || defaults.size; 节省一些字节,虽然我不确定 JSLint 会对此说些什么。 这实际上似乎消除了任何 JSLint 错误,尽管我认为有一些理由不做 x = A ||乙;但是我现在想不起来了。这有效地回答了这个问题。 【参考方案1】:

我也遇到了这个问题,发现这个帖子正在寻找答案,但经过一些试验和错误,我想我得到了它。

这是我用来安抚 JSLint 的语法(使用您的示例):

var size = (
  settings.size ? settings.size : defaults.size
);

这也有效:

var size = (
  settings.size ? settings.size : defaults.size);

请注意,这种特殊的三元逻辑也会导致 JSLint 抱怨其他内容:Expected '||' and instead saw '?',但上述语法确实解决了 OP 问题中提出的具体问题。

【讨论】:

哇,太丑了! @Bergi 是根据我的答案的早期版本发表评论的,该版本的近括号与三元组位于同一行。我也认为它很难看,所以我尝试在新行上使用封闭的括号以获得更对称的格式,它仍然可以安抚 JSLint 并在浏览器中工作。我仍然认为这种语法看起来很奇怪,但我只是用它来捕获任何 JS 错误,因为我认为 OP 也是如此。在投入生产之前,我可能会放弃这种语法。 或者,抛弃带有奇怪规则的 jslint :-) 哈哈,是的,当时的想法是 JSLint 可以在没有构建系统的情况下快速验证,但令我感到奇怪的是,我找不到任何关于这种三元格式预期的文档。我以前从未在其他 linter 上看到过这种情况,但我绝不是 javascript 专家,所以我会听从对这个主题有更多了解的人。 @wcndave eslint 今天几乎是标准的,并且高度可配置。

以上是关于JSLint 和使用三元表达式赋值的主要内容,如果未能解决你的问题,请参考以下文章

三元运算符

在 C# 三元运算符中给出错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句

三元运算符

在C#三元运算符给出错误:只有赋值,调用,递增,递减和新对象表达式可用作语句

三元表达式空指针问题

三元表达式空指针问题