disallow ternary operators when simpler alternatives exist (no-unneeded-ternary)

禁止可以表达为更简单结构的三元操作符 (no-unneeded-ternary)

The --fix option on the command line can automatically fix some of the problems reported by this rule.

命令行中的 --fix 选项可以自动修复一些该规则报告的问题。

It’s a common mistake in JavaScript to use a conditional expression to select between two Boolean values instead of using ! to convert the test to a Boolean. Here are some examples:

在 JavaScript 中一个常见的错误是使用一个条件表达式在两个 Boolean 值之间进行选择而不是使用!将测试条件转为一个 Boolean 类型。如以下示例:

// Bad
var isYes = answer === 1 ? true : false;

// Good
var isYes = answer === 1;

// Bad
var isNo = answer === 1 ? false : true;

// Good
var isNo = answer !== 1;

This rule disallows the use of ‘Boolean’ literals inside conditional expressions.


Another common mistake is using a single variable as both the conditional test and the consequent. In such cases, the logical OR can be used to provide the same functionality. Here is an example:


// Bad
foo(bar ? bar : 1);

// Good
foo(bar || 1);

Rule Details

This rule disallow ternary operators when simpler alternatives exist.


Examples of incorrect code for this rule:

错误 代码示例:

/*eslint no-unneeded-ternary: "error"*/

var a = x === 2 ? true : false;

var a = x ? true : false;

var a = f(x ? x : 1);

Examples of correct code for this rule:

正确 代码示例:

/*eslint no-unneeded-ternary: "error"*/

var a = x === 2 ? "Yes" : "No";

var a = x !== false;

var a = x ? "Yes" : "No";

var a = x ? y : x;

var a = x ? x : 1;  // Note that this is only allowed as it on the right hand side of an assignment; this type of ternary is disallowed everywhere else. See defaultAssignment option below for more details.


This rule has an object option:



The defaultAssignment option allows expressions of the form x ? x : expr (where x is any identifier and expr is any expression) as the right hand side of assignments (but nowhere else).

defaultAssignment 选项允许 x ? x : expr 形式的表达式(其中 x 是任何标识符,expr 是任何表达式)作为赋值的右侧(但没有其他地方)。

Examples of additional incorrect code for this rule with the { "defaultAssignment": false } option:

选项 { "defaultAssignment": false }错误 代码示例:

/*eslint no-unneeded-ternary: ["error", { "defaultAssignment": false }]*/

var a = x ? x : 1;

When Not To Use It

You can turn this rule off if you are not concerned with unnecessary complexity in conditional expressions.



This rule was introduced in ESLint 0.21.0.

该规则在 ESLint 0.21.0 中被引入。