JavaScript,对比理解==和===的区别,!=和!==有何区别?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
在写JavaScript
/Nodejs
/TypeScript
代码的时候,经常会遇到判断两个变量是否相等的情况。一般的时候会使用==
或者!=
来进行判断,有的时候也会碰到===
或者!==
进行判断的时候,那么,两个等号和三个等号两者到底有什么不同呢?这就是本文要探讨的问题。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码感想感悟。测试环境:win10
,chrome@116.0.5845.141
,node@16.14.2
。结论:大多数情况下,使用==
和===
是没有太大区别的。但是,如果考虑代码逻辑严格的话,还是推荐使用===
和!==
。
本文其实没有对两个不等号进行推理判断,大家自行推论吧。
基础类型判断
主要是string
、int
、float
等基础类型的变量相等判断。参考代码:
var a = "0"
var b = 0
var c = parseFloat(0.000.toFixed(2));
console.log(a,typeof(a));
console.log(b,typeof(b));
console.log(c,typeof(c));
console.log( `a == b`, a == b );
console.log( `a == c`, a == c );
console.log( `b == c`, b == c );
console.log( `a === b`, a === b );
console.log( `a === c`, a === c );
console.log( `b === c`, b === c );
输出:
0 string
0 number
0 number
a == b true
a == c true
b == c true
a === b false
a === c false
b === c true
从结果上来说,对于基础类型来说,
==
判断更加宽泛,值一样就可以判断为相等。===
判断更加严格,类型不同,就会被判断为不相等。
而对于整形b
和浮点型c
来说,类型判断都为number
。所以,两者的三等号判断,是true
。
object、array判断
测试代码:
class A {
constructor(uname) {
this.uname = uname;
}
}
var a = new A("sunan");
var b = new A("sunan");
console.log( `a == b`, a == b );
console.log( `a === b`, a === b );
var c = {"cc":"ccc"};
var c2 = {"cc":"ccc"};
console.log( `c == c2`, c == c2 );
console.log( `c === c2`, c === c2);
var d = ["d"];
var d2 = ["d"];
console.log( `d == d2`, d == d2 );
console.log( `d === d2`, d === d2);
输出:
a == b false
a === b false
c == c2 false
c === c2 false
d == d2 false
d === d2 false
这些高级array
、object
或者自定义的类型,变量里面保存的是引用的内存地址,所以正常情况下,无论双等号还是三等号,两者都是不相等的。然而!下面的写法是特例:
class A {
constructor(uname) {
this.uname = uname;
}
}
var a = b = new A("sunan");
console.log( `a == b`, a == b );
console.log( `a === b`, a === b );
var c = c2 = {"cc":"ccc"};
console.log( `c == c2`, c == c2 );
console.log( `c === c2`, c === c2);
var d = d2 = ["d"];
console.log( `d == d2`, d == d2 );
console.log( `d === d2`, d === d2);
输出值是:
a == b true
a === b true
c == c2 true
c === c2 true
d == d2 true
d === d2 true
相关文章
- https://newsn.net/say/js-question-question.html
- https://newsn.net/say/js-hook.html
- https://newsn.net/say/js-object-set-get.html
- https://newsn.net/say/js-object-writable.html
结束语
如果除去Nan
/undefined
/null
/false
这些特殊的空值外,目前的结论是:基础类型判断的时候,双等号(或者!=
)比较的是值,三等号(或者!==
)比较的是值和类型(整形和浮点数算同一个类型number
)。稍稍高级点的类型比较的时候,比较的是引用。所以,只要引用相同,那么双(三)等号判断就相同。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。