JavaScript中的条件表达式受括号影响
我在一本书中偶然发现了这种说法,但我还没有找到解释JavaScript中的条件表达式受括号影响,javascript,Javascript,我在一本书中偶然发现了这种说法,但我还没有找到解释 function foo() { return false } alert(foo() == !foo); //message box says TRUE alert(foo() == !foo()); //message box says FALSE 我一直在想,第一个警报会说是假的。但它说的是真的(?) 您可以看到,上一条语句中的括号使表达式返回FALSE。请告诉我这里缺少什么。foo是一个函数,因此它不是false function
function foo() { return false }
alert(foo() == !foo); //message box says TRUE
alert(foo() == !foo()); //message box says FALSE
我一直在想,第一个警报会说是假的。但它说的是真的(?)
您可以看到,上一条语句中的括号使表达式返回FALSE。请告诉我这里缺少什么。
foo
是一个函数,因此它不是false
function foo() { return false; };
alert(typeof foo); // function
alert(typeof foo()); // boolean
alert(!function (){}); // false
代码>运算符将值转换为布尔值,然后将其反转。函数变量转换为布尔值时为TRUE
所以,!foo
是!TRUE
,即FALSE
foo()
返回FALSE
,因此foo()==!foo
foo()
返回FALSE
,和!foo()。所以,foo()
不等于!foo()在第一种情况下:
foo() == !foo
foo() == !foo()
LHS是foo()
——返回false
function foo() { return false; };
alert(typeof foo); // function
alert(typeof foo()); // boolean
alert(!function (){}); // false
RHS是!foo
-既然foo
存在(并且不是虚假的),!foo
就像!true
并计算为false
function foo() { return false; };
alert(typeof foo); // function
alert(typeof foo()); // boolean
alert(!function (){}); // false
因此foo()==!foo
是真的
在第二种情况下:
foo() == !foo
foo() == !foo()
LHS是foo()
,我们知道它是false
RHS是!foo()!假
,即
真
因此foo()==!foo()
是false
对于第一个函数,foo
不是函数foo
的调用,而是函数本身,因为函数是定义的,所以它是等价的true
(但不是真正的true
)。当您反转(!
)它时,它将变为false
。将其与foo()
(返回false
)进行比较会得到true
,因为false==false
是true
function foo() { return false; };
alert(typeof foo); // function
alert(typeof foo()); // boolean
alert(!function (){}); // false
对于第二个函数,foo()。将其反转为true
,并将其与另一个foo()
调用(即false
)进行比较,会产生false
,因为false==true
是false这里的关键是要注意,在您的第一个警报中,它正在评估!foo
与相反!foo()
。前者(不带()
)表示函数变量本身,而第二个(带()
)表示函数的已计算返回值。