JavaScript有不同的相等比较运算符
=====它也有一个逻辑NOT !,我倾向于考虑使用双逻辑NOT,!!x基本上相同true == x.
但是我知道情况并非总是这样,例如x = []因为它[]是真实的!而且是虚假的==.
那么,哪个xs会(true == x) === !!x给出错误?或者,什么是假的,==但不是!!(反之亦然)?
"那么,
xs会(true == x) === !!x给出false什么?"
x其布尔转换与抽象等效比较算法的转换不同的任何地方.
一个例子是只有空格的字符串:
var x = " ";
Run Code Online (Sandbox Code Playgroud)
它的布尔转换true (就像任何非空字符串的情况一样),但它的==比较是false因为只有空格的字符串将转换为数字0,并且该true值将转换为数字1,而这些值不是等于.
x == true; // false
!!x; // true
Run Code Online (Sandbox Code Playgroud)
或者显示==比较的最终值:
Number(true) == Number(x);
// 1 == 0
1 == 0; // false
Run Code Online (Sandbox Code Playgroud)
并显示结果!!x,它将等同于:
Boolean(x); // true
Run Code Online (Sandbox Code Playgroud)
所以你的原始表达可以粗略地看作如下:
var x = " ";
(Number(true) == Number(x)) === Boolean(x);
// ( 1 == 0 ) === true
// ( false ) === true
false === true; // false
Run Code Online (Sandbox Code Playgroud)
我说"粗略",因为这肯定不会捕获上面链接的算法的所有细节,并且对于提供给操作数的所有值都不一样.
要理解如何==对待它的操作数,你真的需要稍微研究一下算法.
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |