无论是在开发中,还是面试时,在js中判断变量是否相等
,都是一个比较常见的问题。比较典型的有,==
和 ===
的区别?判断变量是否相等有哪些方式?
这里打算总结一下判断变量是否相等的方式,以及做一些简单的分析。
判断变量相等的方式
判断变量是否相等,大致有以下一些方式
==
以及===
;- 利用数组中的
toString
方法; ES6
中的Object.is
方法;- 利用
JSON.stringify
,转换为String
类型来比较; - 自定义方法实现;
==
及 ===
==
为转换类型比较运算符,===
为严格比较运算符,在数据类型相同的情况下,使用==
一般不会造成问题。
let num = 5;
let num2 = 5;
num == num2;//true
num === num2;//true
但在数据类型不一致的情况下,==
会做一些隐性的类型转换。
let num = 5;
let str = '5';
num == str;//true
num === str;//false
'' == false;//true
'' === false;//false
null == undefined;//true
null === undefined;//false
隐性转换类型可以带来一些便利性,但也有可能造成不易发现的bug
,所以还是更推荐使用===
来进行比较,这也是TS
之所以流行的原因之一。
此外,上面列举的都是基本数据类型的比较,而在用===
比较引用类型时,会存在一定的局限性。
let a = {
xx: 1};
let b = a;
a === b;//true
let c = {
xx: 1};
let d = {
xx: 1};
c === d;//false
在比较引用类型时,===
比较的是变量的引用是否相同,而非值
,当引用不同时,就会返回false
。
由此可见,===
并不是一枚无往不利的银弹,在比较对象是否相等时,还需要借助其他更可靠的方法。
Array toString方法
前端给后端传参时,后端有时会要求多个参数,
隔开,Array toString
方法就比较有用了,这一方法也能用作数组比较。
let arr = [1,3,5,7,9];
let arr2 = [1,3,5,7,9];
arr.toString() === arr2.toString();//true "1,3,5,7,9"
不过也存在一定的局限性,不能用来比较二维及以上的数组、不能包含null
、undefined
、object
、function
等,否则容易出错,如下
[1,3,5,[2,4,