js中关于隐式转换 (==) 的一点小坑,面试题中见到的

0 == ''             // true
0 == '0'            // true
 
2 == true           // false
2 == false          // false
 
false == 'false'    // false
false == '0'        // true
 
false == undefined  // false
false == null       // false
null == undefined   // true
 
' \t\r\n ' == 0     // true

undefined与null相等,但不恒等(===)

undefined == null; // true
1 == true;   // true
2 == true;   // false
0 == false;  // true
0 == '';     // true
NaN == NaN;  // false
[] == false; // true

[] == ![];   	// true	
{} == !{}; 		//false
[] == ! []   ->   [] == false  ->  [] == 0  ->   '' == 0   ->  0 == 0   ->  true
{} == ! {}   ->   {} == false  ->  {} == 0  ->   NaN == 0    ->  false

一个是number一个是string时,会尝试将string转换为number
尝试将boolean转换为number,0或1
尝试将Object转换成number或string,取决于另外一个对比量的类型
所以,对于0、空字符串的判断,建议使用 “===” “===”会先判断两边的值类型, 类型不匹配时为false。
那么问题来了,看下面的代码,输出什么,foo的值为什么?
var foo = “11”+2-“1”;
console.log(foo);
console.log(typeof foo);
执行完后foo的值为111,foo的类型为String。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42451932/article/details/85719479