js中==和===的区别

前两天遇到一道面试题,甚为不解,于是学习了下。

题目:

<script>

var x=5 ;

var y=‘5‘ ;

alert(x == y) ;

alert(x !== y) ;

alert(x === y) ;

</script>

结果输入为:true true false

为什么呢?

首先要理解: == ,===区别

==两边值类型不同的时候,要先进行类型转换,再比较。

===不做类型转换,类型不同的一定不等。

==和===的规则如下:

先说===,这个比较简单,具体比较规则如下:

1、如果类型不同,就不相等。

2、如果两个都是数值,并且是同一个值,那么相等;例外的是,如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能用isNaN()来判断)。

3、如果两个都是字符串,每个位置的字符都一样,那么相等;否则不相等。

4、如果两个值都是true,或者都是false,那么相等。

5、如果两个值都引用同一个对象或函数,那么相等,否则不相等。

6、如果两个值都是null,或者都是undefined,那么相等。

再说==,具体比较规则如下:

1、如果两个值类型相同,进行===比较,比较规则同上。

2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:

a、如果一个是null、一个是undefined,那么相等。

b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。

c、如果任一值是true,把它转换成1再比较;如果任一值是false,把它转换成0再比较。

d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。

e、任何其他组合(array数组等),都不相等。

综上所述:

a==b,自动将a,b转型为统一类型后再比较,(将b转换为null类型)故结果:true;

a===b,不会自动转型,直接比较,null,undefined认为是两个不同类型,故结果:false;

js中==和===的区别,布布扣,bubuko.com

时间: 2024-10-13 11:39:33

js中==和===的区别的相关文章

js中!和!!的区别及用法

js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,1.!可将变量转换成boolean类型,null.undefined和空字符串取反都为false,其余都为true. 1 !null=true 2 3 !undefined=true 4 5 !''=true 6 7 !100=false 8 9 !'abc'=false 2.!!常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:判断变量a为非空,未定

js中null &quot; &quot;的区别

var val=text.value; if(val=="") alert("请输入内容哦!"); var val=text.value; if(val==null) alert("请输入内容哦!"); var val=text.value; if(!val) alert("请输入内容哦!"); 这些意味着"空"的语句之前一直困扰着我,,分不清啊!!在一番了解后,写下他们的区别: val== ''   &q

在js中==和===的区别

“==”:叫相等运算符 “===”:叫严格运算符 它们两有什么区别呢? == :表示值相等则都为true ===:表示 不仅要值相等,双方类型也要相等才为true 例子如下: js代码如下: // “==”比较测试,只要内容相同 console.log(1 == 1);//两个参数都是数字1作比较,打印结果为true console.log(1 == '1');//两个参数一个是数字1,一个是字符1,打印结果也为true // "==="比较测试,不仅要类型相同,类型也要相同 cons

Js 中 == 与 === 的区别

1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直接进行“值”比较,两者结果一样 2.对于Array,Object等高级类型,==和===是没有区别的 进行“指针地址”比较 3.基础类型与高级类型,==和===是有区别的 1)对于==,将高级转化为基础类型,进行“值”比较 2)因为类型不同,===结果为false

JS中“==”和“===”的区别(未完成)

1.为什么讨论这个问题? - 有个说法,尽量不用==,而使用===,是这样吗? 2.分析问题,原理是什么? 下面说说ECMAScript 5 language specification里的说明: 1)两种比较方法 全等号===只考虑类型相同的值的比较,不同类型使用===进行比较,返回false 双等号==会先将不同类型的值转为相同类型,然后使用全等号进行比较. 使用双等号会有两个问题: ● 转换规则可能不是你期望的那样 ● 由于双等号是宽容的,类型错误可能会被忽略掉. 2)全等号===(严格等

js中const,var,let区别

今天面试,被问了个问题,const, var, let的区别,当时就懵圈了,var 知道,const.let 是什么鬼??? 回来一百度,找到一篇通俗易懂的介绍,先取之收藏,以备忘.主要内容是:js中三种定义变量的方式const, var, let的区别. 摘自:http://www.cnblogs.com/ksl666/p/5944718.html 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 c

JS中NULL和undifined区别及NULL的作用

1.博客地址:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 2.参考地址2:https://www.zhihu.com/question/35677602/answer/63984217 JS中Null与Undefined的区别 在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined?

js中callback.call()和callback()的区别

js中callback.call()和callback()的区别在js中callback.call()和callback() 有什么区别,举个例子:function a(){alert('hello!');}function b(callback){callback();}function c(callback){callback.call();}function test(){b(a);c(a);}在test函数中,b和c的效果是一样的,都执行了回调函数a.这两种用法有什么区别呢? -----

js中return、return true、return false的区别

js中return.return true.return false;区别 一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性指定的页.    Return False 就相当于终止符,Return True 就相当于执行符.