我在一本书中看到了这个说法,但我还没有找到解释。
function foo() { return false }
alert(foo() == !foo); //message box says TRUE
alert(foo() == !foo()); //message box says FALSE
我一直在想第一个警报会说 FALSE。但它说的是真的(?)
您可以看到最后一条语句中的括号使表达式返回 FALSE。请告诉我我在这里缺少什么。
我在一本书中看到了这个说法,但我还没有找到解释。
function foo() { return false }
alert(foo() == !foo); //message box says TRUE
alert(foo() == !foo()); //message box says FALSE
我一直在想第一个警报会说 FALSE。但它说的是真的(?)
您可以看到最后一条语句中的括号使表达式返回 FALSE。请告诉我我在这里缺少什么。
foo是一个函数,因此它不是false
function foo() { return false; };
alert(typeof foo); // function
alert(typeof foo()); // boolean
alert(!function (){}); // false
在第一种情况下:
foo() == !foo
LHS 是foo()- 返回false
RHS 是!foo- 并且因为foo存在(并且不是假的),!foo所以就像!true并且评估为false
因此foo() == !foo是true
在第二种情况下:
foo() == !foo()
LHS 是foo()我们false所知道的
RHS is !foo()- 这与说!false,即true
因此foo() == !foo()是false
运算符将!值转换为布尔值,然后将其反转。函数变量TRUE在转换为布尔值时。
所以,!foo是!TRUE,这是FALSE。 foo()回报FALSE,所以foo() == !foo。
foo()FALSEreturn和!foo()is TRUE,因为它否定了返回值。所以,foo()不等于!foo()。
对于第一个,foo不是函数的调用foo,而是函数本身,并且由于定义了函数,因此它是等效的true(但不是真的true)。当你反转 ( !) 时,它变为false。将其与foo()(which 返回false) 进行比较,得到truesince false == falseis true。
对于第二个,foo()现在是 function 的函数调用foo,而后者又返回false。将其反转为true,并将其与另一个foo()调用(即 is false)进行比较产生false,因为false == trueis false。