Javascript中两个等于号和三个等于号的区别

/* 一、Javascript中两个等于号和三个等于号的区别

这两种操作都会返回一个boolean值。一般来说我们把”==”称之为相等,称”===”为全等。

1.全等操作符 “===”

当用全等操作符”===”来判断时,
首先检查操作符两边操作数数据类型是否一致,若不一致,则直接返回false,否则,
才进行下一步判断。如果是两个boolean的比较,则”===”两边必须同为true或同为false,
才可以返回true,否则返回false.若两相比较的是数字,那么只有当这两个数字大小相等时才会返回true,
否则返回false。如果要比较的两个变量是字符串,先比较两个字符串的长度length是否相等,如果长度不一样,
则返回false,如果相等,则从两个变量的第一个字符开始比较是否相等,一直比较到最后一位,如果其中的某一位不想等,
则返回false,否则返回true,(注意:字符串的比较是不会忽略空格的,所以在比较两个字符串是否相等时,为确保安全,
应该先去除空格,然后把两个字符串同转为大写或者小写之后再进行比较)。如: */

true === 1    //false
"1" === 1    //false

//boolean的比较
true === true  //true
true === false  //false

//string的比较
"hello" === "helloworrld" //false
"hello" === "world" //false
"hello" === " hello" //false
"hello" === "hellO" //false
"hello" === "hello" //true

//number的比较
1 === 1  //true
1 === 1.0 //true
1 === 1.2 //false

//null和undefined的比较
undefined === undefined  //true
null === null       //true
undefined === null    //false,两者在"=="时才返回true

// 如果进行”===”比较的两个操作数不是基本类型值,而是两个对象,这时候判断依据就是,判断这两个变量是否是”同一个”对象
var a, b, c;
a = b = {
    name: '柳轻侯',
    city: '南京'
};
c = {
    name: '柳轻侯',
    city: '南京'
};
a === b   //true
a === c   //false

/* 两个对象仅仅”长得一样”是不够的,a和c都是Object实例,且两者拥有相同的属性和值,
可是这两个却不是”同一个”对象,因为实际上a和c指向了两个不同的实例,所以这两个对象是不全等的。
而a和b却是指向了同一个对象,换个说法,a和b是同一个对象的不同别名,他们实际上指向的对象是完全相同的, */


/* 2.相等操作符”==”

全等操作符在进行判断的时候,如果两个变量的类型不同,则直接返回false,而与此不同,”==”相等操作符在判断的时候,
如果两个变量的类型不同,则会做一个隐式的类型转换,把要比较的两个值转化为相同的类型再做比较,那么这种转化规则是怎么样的?

在转化不同数据类型时,相等和不等操作符遵循下面的基本规则

如果其中一个操作数是是boolean值,则在比较之前会先将boolean值转化为number值,true转化为1,false转为0;
如果其中一个操作数是string类型,而另一个是number类型,则在比较之前先将string类型转化为number类型再进行判断;
在比较之前,undefined和null是不会转为其他值进行比较的;
如果其中一个操作数是对象,而另一个是基本类型值,则在比较之前先将对象转为基本类型值,然后再依据前面的规则进行后续的比较;
两个操作数在比较时遵循下列规则

undefined和null是相等的,即:undefined == null;
如果有一个操作数是NaN,那么返回false,即使两个操作数都是NaN,也会返回false;
如果两个操作数是对象,则比较规则跟”===”的比较规则是一样的,除非这两个操作数是同一个对象,则返回true,否则返回false;
此处需要注意的是,NaN == NaN是返回false的,怎么去判定一个变量是不是NaN呢,用!=来判定,判定一个变量是否不等于NaN。比如: */

//如果需要判定一个变量是不是NaN,可以如下
//a是你需要判定的变量
if ((typeof a === "number") && a != NaN) {  //此处需要注意,NaN也是number类型
    //TODO 
}

// 常见比较情况及其结果
null == undefined  // true 
"NaN" == NaN    // false 
5 == NaN      // false 
NaN == NaN     // false NaN === NaN也是false 
NaN != NaN     // true 
false == 0     // true 
true == 1      // true 
true == 2      // false 
undefined == 0   // false 
null == 0      // false
"5" == 5      // true

/* “==”在比较不同类型值得时候会进行隐式的类型转化,而”===”不会转化,
全等一定相等,相等却不一定全等,这是一个充分不必要条件。
且在相等比较的时候不会转化为其他类型的值。NaN是不等于NaN 的,要判断某个变量是不是NaN,
要用”!=”。对象和非对象在进行比较的时候会先转为基本类型值然后再根据上面的规则进行比较。 */

 

posted @ 2021-10-12 09:03  赵永强  阅读(1635)  评论(0编辑  收藏  举报