我可以使用这样的语法吗?

时间:2011-08-06 14:48:23

标签: javascript operators

在一个JS库中,我看到了这样的语法:

if (val > 5 == t) { ... }

我在控制台中对此进行了测试:

1 == 1 == 2 // false
2 > 1 == 1  // true
1 == 2 == 1 // false
1 == 1 == 1 // true
1 < 2 < 3   // true
1 > 2 > 3   // false
乍一看都是正确的。这可以用吗?

6 个答案:

答案 0 :(得分:7)

1 == 1 == 2  // this
true == 2    // becomes this
1 == 2       // which becomes this, and is false
2 > 1 == 1  // this
true == 1   // becomes this
1 == 1      // which becomes this, and is true

......等等。

如果您对转换感到疑惑,则应对==运算符进行搜索,该运算符使用Abstract Equality Comparison Algorithm

答案 1 :(得分:3)

你没有真正比较你认为你正在比较的东西:

(1 == 1) == 2 // actually true == 2 which is false

(1 == 2) == 1 // actually false == 1 which is false

这就是严格相等===在所有情况下都会失败的原因

答案 2 :(得分:0)

这是一个正确的语法,但不是我推荐的语法。发生了什么,可能是:

if ((val > 5) == t) { ... }

I tested this in console:

(1 == 1) == 2 // false
(2 > 1) == 1  // true
(1 == 2) == 1 // false
(1 == 1) == 1 // true
(1 < 2) < 3   // true
(1 > 2) > 3   // false

左边的布尔值隐式转换为int。

答案 3 :(得分:0)

没有什么可以阻止你使用这种冒险的语法,但请记住,在JavaScript代码中出现错误的最常见原因之一是弄乱operator precedence

因此,强烈建议通过在优先级组中添加括号来明确定义优先级,以防它们由多个简单的数学表达式组成,其优先级可以明确地确定。

答案 4 :(得分:0)

另一个问题是类型强制 jslint输出:

  

错误:       第2行第13个问题:预期'==='而是看到了   '=='

if (val > 5 == t) { }

答案 5 :(得分:0)

JavaScript不支持数学中使用的链接比较语法:

1 < 2 < 3 // 1 is less than 2 which is less than 3.

相反,它会从左到右评估每个比较,有时可以产生与数学链式比较相同的结果,就像所有示例一样,但是过程不同:

1 < 2 < 3 // "1 is less than 2" is true, true is 1, "1 is less than 3" is true.
          // Javascript returns true.

3 < 2 < 1 // "3 is less than 2" is false, false is 0, "0 is less than 1" is true.
          // Javascript returns true.

因此,不建议这样做。

但是,可以回答您的问题。