“所以,这x
s就(true == x) === !!x
给false
?”
不限x
其中其布尔转换是不一样的它的转换由Abstract Equality Comparison Algorithm。
一个例子是仅具有空白的字符串:
var x = " ";
其布尔转换是true
(如与任何非空字符串的情况下),但其==
比较false
因为只有空格的字符串将被转换为数字0
,并且true
值将被转换为数字1
,并且这些值不相等。
x == true; // false
!!x; // true
或以示出最终值==
在比较:
Number(true) == Number(x);
// 1 == 0
1 == 0; // false
,并显示出的!!x
的结果,这将是等效于这样的:
Boolean(x); // true
所以你的原始表达式可以粗制滥造被视为如下:
var x = " ";
(Number(true) == Number(x)) === Boolean(x);
// ( 1 == 0) === true
// (false) === true
false === true; // false
我说“粗暴”,因为这肯定不捕获上面链接的算法的所有细节,并荣获” t对于提供给操作数的所有值都是相同的。
要了解==
如何处理它的操作数,你真的需要研究一下这个算法。
松散的平等与真实无关。 – SLaks
多数民众赞成深深!!!!! –
'“a”== true'为false –