在一个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
乍一看正确的。这可以用吗?
在一个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
乍一看正确的。这可以用吗?
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。
这是一个正确的语法,但不是我会推荐的。发生了什么,可能是:
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。
你不是真的比较你认为你是比较:
(1 == 1) == 2 // actually true == 2 which is false
(1 == 2) == 1 // actually false == 1 which is false
这就是为什么全等===
将在所有的情况下未能
没有什么可以从然而,使用这种冒险的语法阻止你请记住,在JavaScript代码中存在错误的最常见原因之一是搞砸operator precedence。
因此,强烈建议通过向优先组添加括号来显式定义优先级,以防其优先级明显可确定的多个简单数学表达式组成。
另一个问题是类型强制。
jslint
输出:
Error: Problem at line 2 character 13: Expected '===' and instead saw '=='.
if (val > 5 == t) { }
'1> 2 <3 // TRUE' – Joe
'1 == 2 == 0'也是TRUE;。不建议使用 – duri
。这会降低代码的可读性。 –