我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在写JavaScript/Nodejs/TypeScript代码的时候,经常会遇到判断两个变量是否相等的情况。一般的时候会使用==或者!=来进行判断,有的时候也会碰到===或者!==进行判断的时候,那么,两个等号和三个等号两者到底有什么不同呢?这就是本文要探讨的问题。

苏南大叔:JavaScript,对比理解==和===的区别,!=和!==有何区别? - 双等号和三等号的区别
JavaScript,对比理解==和===的区别,!=和!==有何区别?(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码感想感悟。测试环境:win10chrome@116.0.5845.141node@16.14.2。结论:大多数情况下,使用=====是没有太大区别的。但是,如果考虑代码逻辑严格的话,还是推荐使用===!==

本文其实没有对两个不等号进行推理判断,大家自行推论吧。

基础类型判断

主要是stringintfloat等基础类型的变量相等判断。参考代码:

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

苏南大叔:JavaScript,对比理解==和===的区别,!=和!==有何区别? - 高级类型比较
JavaScript,对比理解==和===的区别,!=和!==有何区别?(图3-2)

这些高级arrayobject或者自定义的类型,变量里面保存的是引用的内存地址,所以正常情况下,无论双等号还是三等号,两者都是不相等的。然而!下面的写法是特例:

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

苏南大叔:JavaScript,对比理解==和===的区别,!=和!==有何区别? - 高级类型比较2
JavaScript,对比理解==和===的区别,!=和!==有何区别?(图3-3)

相关文章

结束语

如果除去Nan/undefined/null/false这些特殊的空值外,目前的结论是:基础类型判断的时候,双等号(或者!=)比较的是值,三等号(或者!==)比较的是值和类型(整形和浮点数算同一个类型number)。稍稍高级点的类型比较的时候,比较的是引用。所以,只要引用相同,那么双(三)等号判断就相同。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   js    node