js采坑之旅(1) 0==""

版权声明:转载请注明出处,谢谢 https://blog.csdn.net/guoqing2016/article/details/88165061

有一次在写前端数据上传的时候,因为数据为必填项要进行数据过滤
所以使用了直接判读非空字符串的方式进行过滤,例如:

var data =“测试”
if (data != "") {
	console.log(“我不会被执行”);
	//不会执行
}

一开始的执行看似正常,但是当data的值为0时,它就会执行到if内的语句

var data = 0
if (data != "") {
	console.log(“我会被执行”);
	//会执行
}

原来在js中0表示逻辑假,而""等价于逻辑假。

"" == false //ture
0 == false //true
0 == "" //true

这时细心些的朋友可能会发现,字符串0与数字0也是等价的

"0" == 0 //ture
"" == 0 //true
"0" == false //ture
"" == false //true
"0" == "" // false

在上面的代码中可以看出"0"和"“都表示逻辑假,但是"0” != ""这是为什么?
其实在js中两个不同类型值比较,其中一个是数字,另一个是字符串,会先将字符串转换为数字,然后比较数字

"10" == 10 //true
"0xa" == 10 //true

而且在将字符串转为数字之前会先判断isNaN,然而 isNaN("") == true ""不是数字就会转化逻辑假
而0也表示逻辑假,所以就有了 “” == 0 //true
如果想要 “”!=0可以使用js中的全等操作,即

"" === 0 //false

因为全等操作 === 在比较相等性的时候,不会主动转换数据的类型

猜你喜欢

转载自blog.csdn.net/guoqing2016/article/details/88165061