Javascript 为什么1==1==1,而不是';A';==';A';==';A';
我正在尝试基于配置负载编写灵活的查询逻辑,例如:Javascript 为什么1==1==1,而不是';A';==';A';==';A';,javascript,string-comparison,Javascript,String Comparison,我正在尝试基于配置负载编写灵活的查询逻辑,例如: { "test": "( fieldA == fieldB == fieldC )" } 当我的应用程序用文本数据替换“fieldA”、“fieldB”和“fieldC”值时,结果总是错误的。 这显然与我混淆javascript运行比较的方式有关(它必须与数据类型和数学顺序有关),但是有人能用一个简单的字母数字值示例来解释这一点吗 e、 “约翰·史密斯”总是假的 法律允许A==B==C或A==A==A
{
"test": "( fieldA == fieldB == fieldC )"
}
当我的应用程序用文本数据替换“fieldA”、“fieldB”和“fieldC”值时,结果总是错误的。
这显然与我混淆javascript运行比较的方式有关(它必须与数据类型和数学顺序有关),但是有人能用一个简单的字母数字值示例来解释这一点吗
e、 “约翰·史密斯”总是假的 法律允许A==B==C或A==A==A
但问题是,A==C永远不会发生,或者在您的例子中,fieldA==fieldC永远不会发生。因此,这会导致歧义
x==y==z
不符合您的想法:
它转换为(x==y)==z
javascript的==
操作符的怪癖:
(x === y) && (x === z)
和1==1
都转换为A'==A'
true
- 但是:
返回true,而true==1
不返回truetrue==A'
您可能希望将条件重写为:
(x == y) && (x == z)
并且很可能希望使用明确的===
运算符:
(x === y) && (x === z)
要避免您遇到的陷阱(
true==1
检查,而不是true==1
)将布尔值与字符串(甚至数字)进行比较一开始就很奇怪。这个逻辑的目标是什么?因为true==1
,但是true!='约翰·史密斯的
根本没有可比性,(fieldA==fieldB==fieldC)
总是(fieldA==fieldB==fieldC)
…在任何需要重写为的语言中,fieldA==fieldB&&fieldA==fieldC&&fieldB==fieldC
这是因为操作顺序,所以('A'==A'))
这是真的
所以如果你做了'A'='A'==true
你会得到真的,但是('A'='A')=='A'
不是真的,因为最后一个'A'
不等于真的
。。。