 
            yoda
要求或禁止 “Yoda” 条件
Yoda 条件之所以得名,是因为条件中的字面量值在前,而变量在后。例如,以下是一个 Yoda 条件
if ("red" === color) {
    // ...
}
这被称为 Yoda 条件,因为它读起来像“如果红色等于颜色”,类似于星球大战人物 Yoda 说话的方式。 与另一种排列操作数的方式比较
if (color === "red") {
    // ...
}
这通常读作“如果颜色等于红色”,这可以说是描述比较的更自然方式。
Yoda 条件的支持者强调,不可能错误地使用 = 代替 ==,因为您无法赋值给字面量值。 这样做会导致语法错误,并且您会及早被告知错误。 因此,这种做法在早期编程中非常普遍,当时工具尚不可用。
Yoda 条件的反对者指出,工具使我们成为更好的程序员,因为工具会捕获错误使用 = 代替 == 的情况(ESLint 会为您捕获此错误)。 因此,他们认为,该模式的效用并不超过使用 Yoda 条件时代码的可读性损失。
规则详情
此规则旨在强制执行将变量与字面量值进行比较的条件的一致样式。
选项
此规则可以接受字符串选项
- 如果是默认的 "never",则比较绝不能是 Yoda 条件。
- 如果是 "always",则字面量值必须始终放在前面。
默认的 "never" 选项可以在对象字面量中具有例外选项
- 如果 "exceptRange"属性为true,则该规则允许在直接包含在括号中的范围比较中使用 Yoda 条件,包括if或while条件的括号。 默认值为false。 范围比较测试变量是否在两个字面量值之间的范围内。
- 如果 "onlyEquality"属性为true,则该规则仅针对相等运算符==和===报告 Yoda 条件。 默认值为false。
onlyEquality 选项允许 exceptRange 允许的异常的超集,因此这两个选项一起使用没有意义。
never
默认 "never" 选项的错误代码示例
                            在 Playground 中打开
/*eslint yoda: "error"*/
if () {
    // ...
}
if () {
    // ...
}
if () {
    // ...
}
if () {
    // ...
}
if () {
    // ...
}
if () {
    // ...
}
if ( && x < 1) {
    // ...
}
默认 "never" 选项的正确代码示例
                            在 Playground 中打开
/*eslint yoda: "error"*/
if (5 & value) {
    // ...
}
if (value === "red") {
    // ...
}
if (value === `red`) {
    // ...
}
if (`${value}` === `red`) {
}
exceptRange
"never", { "exceptRange": true } 选项的正确代码示例
                            在 Playground 中打开
/*eslint yoda: ["error", "never", { "exceptRange": true }]*/
function isReddish(color) {
    return (color.hue < 60 || 300 < color.hue);
}
if (x < -1 || 1 < x) {
    // ...
}
if (count < 10 && (0 <= rand && rand < 1)) {
    // ...
}
if (`blue` < x && x < `green`) {
    // ...
}
function howLong(arr) {
    return (0 <= arr.length && arr.length < 10) ? "short" : "long";
}
onlyEquality
"never", { "onlyEquality": true } 选项的正确代码示例
                            在 Playground 中打开
/*eslint yoda: ["error", "never", { "onlyEquality": true }]*/
if (x < -1 || 9 < x) {
}
if (x !== 'foo' && 'bar' != x) {
}
if (x !== `foo` && `bar` != x) {
}
always
"always" 选项的错误代码示例
                            在 Playground 中打开
/*eslint yoda: ["error", "always"]*/
if () {
    // ...
}
if () {
    // ...
}
"always" 选项的正确代码示例
                            在 Playground 中打开
            /*eslint yoda: ["error", "always"]*/
if ("blue" == value) {
    // ...
}
if (`blue` == value) {
    // ...
}
if (`blue` == `${value}`) {
    // ...
}
if (-1 < str.indexOf(substr)) {
    // ...
}
版本
此规则在 ESLint v0.7.1 中引入。
延伸阅读
