受括号影响的JavaScript中的条件表达式

时间:2013-04-24 15:00:49

标签: javascript

我在一本书中看到了这个陈述,但我还没有找到解释。

function foo() { return false }

alert(foo() == !foo); //message box says TRUE
alert(foo() == !foo()); //message box says FALSE

我一直在想第一个警报会说是假的。但它说TRUE(?)

您可以看到最后一个语句中的括号使表达式返回FALSE。请告诉我这里缺少的东西。

4 个答案:

答案 0 :(得分:4)

foo是一个函数,因此它不是false

function foo() { return false; };
alert(typeof foo); // function
alert(typeof foo()); // boolean
alert(!function (){}); // false

答案 1 :(得分:2)

在第一种情况下:

foo() == !foo

LHS为foo() - 返回false

RHS是!foo - 由于foo存在(并且不是假的),!foo就像!true并且评估为false

因此foo() == !footrue


在第二种情况下:

foo() == !foo()

LHS是foo(),我们知道false

RHS为!foo() - 这就是说!false,即true

因此foo() == !foo()false

答案 2 :(得分:1)

!运算符将值转换为布尔值,然后将其反转。转换为布尔值时,函数变量为TRUE

因此,!foo!TRUE,即FALSEfoo()会返回FALSE,所以foo() == !foo

foo()返回FALSE!foo()TRUE,因为它取消了返回值。因此,foo()不等于!foo()

答案 3 :(得分:0)

对于第一个,foo不是函数foo的调用,而是函数本身,因为函数已定义,它等效true(但不是真的{ {1}})。当它反转(true)时,它变为!。将其与false(返回foo())进行比较,结果为false,因为truefalse == false

对于第二个,true现在是函数foo()的函数调用,而函数foo又返回false。倒置它会使其true,并将其与另一个foo()调用(false)进行比较,得出false,因为false == truefalse