您的位置是:网站首页>Javascript编程Javascript编程

js中相等判断===、==、Object.is()的区别

少儿编程网2020-03-27 14:59:48Javascript编程 人已围观 来源:少儿编程 -用户投稿

简介相信刚接触JS的人都会被他的相等性判断给整糊涂,看看下面代码,你能答对几个?NaN===NaN//falseNaN==NaN//falseObject.is(NaN,NaN)//true0==false//true1==true//trueNumber(null)===0//truenull==0/

版权所有:http://wWw.pxcodeS.com

Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

相信刚接触JS的人都会被他的相等性判断给整糊涂,看看下面代码,你能答对几个?Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

NaN === NaN // false
NaN == NaN // false
Object.is(NaN, NaN) // true
0 == false  // true
1 == true   // true
Number(null) === 0  // true
null == 0   // false

JavaScript提供了三种不同的值比较操作,分别是严格相等、宽松相等、以及Object.is,今天查完资料后做了一下总结,希望下面的内容能够对大家有所帮助,如果哪些地方有误的话,也欢迎大家指正。Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

【相关课程推荐:JavaScript视频教程Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

1. 严格相等 x === y判断逻辑Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

1. 如果x的数据类型和y的数据类型不相同,返回false;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

2. 如果x是Number类型Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● x是NaN,返回falseJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● y是NaN,返回falseJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● x的值和y的值相等,返回trueJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● x是+0,y是-0,返回trueJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● x是-0,y是+0,返回trueJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 否则返回falseJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

3. 其他类型参照SameValueNonNumber(x, y)Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 断言:x,y不是Number类型;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 断言: x,y的数据类型相同;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● x是undefined, y是undefined return true;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● x是null, y是null,return true;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● x是字符串类型,当且仅当x,y字符序列完全相同时(长度相同,每个位置上的字符也相同)返回true, 否则返回false;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 如果x是布尔类型,当x,y都为true或者都为false时返回true,否则返回false;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 如果x是symbol类型,当x,y是相同的symbol值,返回true,否则返回false;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 如果x,y是同一个对象值,返回true,否则返回false;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

NaN === NaN // false
undefined === undefined // true
null === null   // true
undefined === null  // false

2. 宽松相等 x == yJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

1. 如果x,y的类型相同,返回x===y的结果;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

2. 如果x是null, y是undefined, 返回true;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

3. 如果x是undefined, y是null, 返回true;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

4. 如果x是数值,y是字符串, 返回x == ToNumber(y);Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

5. 如果x是字符串,y是数值, 返回ToNumber(x) == y;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

6. 如果x是布尔类型, 返回ToNumber(x)==y 的结果;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

7. 如果y是布尔类型,返回 x==ToNumber(y) 的结果;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

8. 如果x是String或Number或Symbol中的一种并且Type(y)是Object,返回 x==ToPrimitive(y) 的结果Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

9. 如果Type(x)是Object并且Type(y)是String或Number或Symbol中的一种,返回 ToPrimitive(x)==y 的结果Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

10. 其他返回falseJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

12 == '0xc' // true, 0xc是16进制
12 == '12'  // true
12 == '12c' // false, 说明ToNumber转换是用的Number()方法

注意:Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

Number(null) === 0

但是Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

null == 0 // false,

2.1 ToNumber将一个值转换为数值类型Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

1. 如果是boolean类型, true返回1,false返回0;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

2. 如果是数值,只是简单的传入返回;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

3. 如果是null,返回0Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

4. 如果是undefined, 返回NaN;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

5. 如果是字符串,字符串如果只包含数字,则将其转换成十进制数;如果是有效的浮点格式,将其转换成对应的浮点数值;如果是二进制或十六进制将其转换成对应的十进制数值;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

6. 如果是对象,调用对象的valueOf()方法,然后依照前面规则转换,如果valueOf返回值是NaN,则调用toString()方法,再依照前面的规则转换返回的字符串Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

2.2 ToPrimitiveJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

toPrimitive(A)通过尝试调用 A 的A.toString() 和 A.valueOf() 方法,将参数 A 转换为原始值(Primitive);Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

JS中原始类型有:Number、String、Boolean、Null、Undefined;Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

不同类型对象的valueOf()方法的返回值:Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

对象 返回值
Array 返回数组对象本身。
Boolean 布尔值
Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC
Function 函数本身
Number 数字值
Object 对象本身。这是默认情况, 可以覆盖自定义对象的valueOf方法
String 字符串值
// Array:返回数组对象本身
var array = ["ABC", true, 12, -5];
console.log(array.valueOf() === array);   // true
// Date:当前时间距1970年1月1日午夜的毫秒数
var date = new Date(2013, 7, 18, 23, 11, 59, 230);
console.log(date.valueOf());   // 1376838719230
// Number:返回数字值
var num =  15.26540;
console.log(num.valueOf());   // 15.2654
// 布尔:返回布尔值true或false
var bool = true;
console.log(bool.valueOf() === bool);   // true
// new一个Boolean对象
var newBool = new Boolean(true);
// valueOf()返回的是true,两者的值相等
console.log(newBool.valueOf() == newBool);   // true
// 但是不全等,两者类型不相等,前者是boolean类型,后者是object类型
console.log(newBool.valueOf() === newBool);   // false
// Function:返回函数本身
function foo(){}
console.log( foo.valueOf() === foo );   // true
var foo2 =  new Function("x", "y", "return x + y;");
console.log( foo2.valueOf() );
/*
ƒ anonymous(x,y
) {
return x + y;
}
*/
// Object:返回对象本身
var obj = {name: "张三", age: 18};
console.log( obj.valueOf() === obj );   // true
// String:返回字符串值
var str = "http://www.xyz.com";
console.log( str.valueOf() === str );   // true
// new一个字符串对象
var str2 = new String("http://www.xyz.com");
// 两者的值相等,但不全等,因为类型不同,前者为string类型,后者为object类型
console.log( str2.valueOf() === str2 );   // false

3.同值相等Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

同值相等由 Object.is 方法判断:Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 两个值都是 undefinedJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 两个值都是 nullJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 两个值都是 true 或者都是 falseJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 两个值是由相同个数的字符按照相同的顺序组成的字符串Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 两个值指向同一个对象Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

● 两个值都是数字并且Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

○ 都是正零 +0,Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

○ 或者都是负零 -0,Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

○ 或者都是 NaNJro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

○ 都是除零和 NaN 外的其它同一个数字Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true
Object.is('foo', 'bar');     // false
Object.is([], []);           // false
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false
Object.is(null, null);       // true
Object.is(true, 'true')     // false
// 特例
Object.is(0, -0);            // false
Object.is(0, +0);            // true
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

4.零值相等Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

与同值相等类似,不过会认为 +0 与 -0 相等。Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

小结Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

=== 不做类型转换,当两边的数类型不相同时,直接返回false;当前类型相同且都是数值类型的时候,有一个是NaN,那么结果就是false, 另外 +0 === -0Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

==运算符,当两边操作数类不相同时会做隐式转换,然后才进行比较,这样的话就会出现 false == 0, '' == false 等现象, 但是Object.is不会做这种转换Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

本文来自 js教程 栏目,欢迎学习!Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

以上就是js中相等判断===、==、Object.is()的区别的详细内容,更多请关注少儿编程网其它相关文章!Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

来源:php中文网Jro少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

版权所有:http://wWw.pxcodeS.com


相关文章:

支持一下 ( )

js中相等判断===、==、Object.is()的区别

      匿名评论
    • 评论
    人参与,条评论
    js中相等判断===、==、Object.is()的区别

客服在线

服务时间

周一至周日 9:00-21:00