关于js中 0 == ‘ ‘ 为 true 的问题

简介: 在一次写代码中,发现了一个特别奇葩的操作,当时给我震惊了

发现问题的场景


在一次写代码中,发现了一个特别奇葩的操作,当时给我震惊了


0 == ' '竟然为true,我说怎么判断失效了

$(function() {
  console.log("0 == ' ':" + (0 == ''));
  console.log("0 === '':" + (0 === ''));
  console.log("0 == null:" + (0 == null));
  console.log("0 === null:" + (0 === null));
  console.log("1 == true:" + (1 == true));
  console.log("1 === true:" + (1 === true));
  console.log("0 == false:" + (0 == false));
  console.log("0 === false:" + (0 === false));
  console.log("null == undefined:" + (null == undefined));
  console.log("null === undefined:" + (null === undefined));
})

1024b19218af40c7a8a6290c6186518d.png


先来说一下 === 吧

1、首先是判断两值的类型是否一样,不一样就不相等。


2、字符串为例,需要两个字符串的长度一致和每个字符的位置都一致才相等。


3、如果两都是引用,比较引用是否一致。


4、从上面的运行结果可以看出 null === undefined 是 false的,因为两个值的类型不一样。


其实,js的 === 有点类似 Java 里面的 equals 方法。


最后就是 js 的 == 了

1、如果两值的类型一样,然后就进行 === 比较。


2、如果两值的类型不一样,就先转为相同的类型再进行比较。


【1】从上面的运行结果可以看到 null == undefined 为 true 的,null == undefined 比较时是不进行转换的,并且规定 null 等于 undefined。


【2】如果不同类型与 true 或者 false 进行比较时,会先把true转成 1 ,false 转成 0 ,再进行比较。


这就解释了为什么 0 == false 和 1== true 为 true 了。


【3】如果一个是基本数据类型一个是对象,那会先把对象先转成基本数据类型,再进行比较。


【4】本文的重点:0 == ' ' 为 true,因为0可以为 false,空格或空值也为 false,所以它们相等。


我们 if 判断 if(null) 是false,那么为什么 0 == null 是 false呢,是因为null 和 undefined 和 NaN 是特殊值,不进行转换的。


NaN == null ,NaN == undefined 都为 false,无论 NaN == 啥都为 false。


【 5】如果两都是对象呢,看下面例子:

function test(name) {
  this.name = name;
}
$(function() {
  var a1 = new test("aaa");
  var a2 = new test("aaa");
  console.log("a1 == a2:" + (a1 == a2));
  var list1 = new Array("a","b","c");
  var list2 = new Array("a","b","c");
  console.log("list1 == list2:" + (list1 == list2));
})

1024b19218af40c7a8a6290c6186518d.png


可以看出两对象 == 是比较对象的引用,如果不是同一个引用,则返回 false。

目录
相关文章
|
6月前
|
JavaScript
js 如何判断一个数组内的值都为true
js 如何判断一个数组内的值都为true
55 0
|
JavaScript
JS中字串转参数用的false/true
JS中字串转参数用的false/true
74 0
|
JavaScript 数据安全/隐私保护 前端开发
js中return,return true,return false三者的用法及区别
return其实就是return undefined; 1.语法及返回方式 ①返回控制与函数结果         语法为:return 表达式;         语句结果函数的执行,返回调用函数,而且把表达式的值作为函数结果返回出去 ②返回控制无函数结果         语法为:return;         在大多数情况下,为事件处理函数如果让其返回false,可以防止默认的事件行为.
1634 0
|
JavaScript
js中"",0,''比较的值是true
js中"",0,''比较的值是true
js中"",0,''比较的值是true
|
JavaScript
js中return;、return true、return false;区别
js中return;、return true、return false;区别 一、返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二、返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个元素,页面会跳转到该元素href属性指定的页.    Return False 就相当于终止符,Return True 就相当于执行符。
962 0
|
JavaScript 前端开发
JS中字符串的true转化为boolean类型的true
var a="True"; a = eval(a.toLowerCase()); alert(typeof a); //boolean alert(a);//true 正解,eval方法动态将参数运算成一个字符串,然后自动判断了字符串的类型,true被认为是boolean类型的变量.
1023 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
95 2
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
122 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
81 4