山寨 You-Dont-Know-JS 之 You-Dont-Know-操作符

106 阅读1分钟

看看下面的题知道几个:

Infinity * 0;

Infinity / Infinity;

0 / 0;

Infinity % 5;

Infinity - Infinity;

-0 - (-0);

+[x];

+[];

+[1,2];

false == 0;


true == 1;

| | | | | | | |

答案:

// NaN
Infinity * 0;

// NaN
Infinity / Infinity;

// NaN
0 / 0;

// NaN
Infinity % 5;

// NaN
Infinity - Infinity;
// 这几个我理解是值有歧义的都返回 NaN, 比如 Infinity * 0 , 那么是 Infinity 呢, 还是 0 呢
// 再比如 Infinity - Infinity 因为 Infinity + 1 == Infinity, Infinity + 2 == Infinity ... 所以这个可以等于任何数, 有歧义就给个 NaN

// +0
-0 - (-0);

// +x
+[x];

// 0
+[];

// NaN
+[1,2];
// 这几个都是先调用`Array.property.valueOf`, 返回数组本身,不能使用, 那么又调用`Array.property.toString`, 那么 
// +[x] => +x
// +[] => +'' => 0
// +[1,2] => +'1,2' => NaN

// true
false == 0;

// true
true == 1;