Javascript 为什么?运算符为不同的表达式返回true?

Javascript 为什么?运算符为不同的表达式返回true?,javascript,Javascript,考虑以下javascript var test = ['1', '2', '3']; 在控制台中,键入 test.indexOf('1') > -1; 结果将是真实的 现在添加基本Not运算符 !test.indexOf('1') > -1; 结果也是正确的,但我认为结果是错误的。为什么是真的 这是因为的值高于,因此首先,test.indexOf()的结果被否定,在您的示例中,0被否定,因此它变为true。然后在不等式的上下文中使用,不等式将true转换为1进行比较。当1>-1

考虑以下javascript

var test = ['1', '2', '3'];
在控制台中,键入

test.indexOf('1') > -1;
结果将是真实的

现在添加基本Not运算符

!test.indexOf('1') > -1;
结果也是正确的,但我认为结果是错误的。为什么是真的


这是因为
的值高于
,因此首先,
test.indexOf()
的结果被否定,在您的示例中,0被否定,因此它变为
true
。然后在不等式的上下文中使用,不等式将
true
转换为
1
进行比较。当
1>-1
时,您得到
true
的结果,您得到
true
,因为您否定了左侧值

 !test.indexOf('1')
不是整个表达式

 !(test.indexOf('1') > -1). 
换言之:

!test.indexOf('1') > -1  // expected true

!(test.indexOf('1') > -1) // expected false
就像数学陈述一样:

5*2+2 // not the same as 5*(2+2)