标签:expand javascrip 对象 函数实现 null 并且 使用 类型转换 undefined
Object.is(value1, value2);
返回一个boolean
Object.is()用于确定两个值是否相同,两个值相同有如下的几种情况:
都是 undefined
都是
都是 true 或 false
是长度相同的两个字符串,并且每个序号对应的字符相同
相同的两个对象(两个对象有相同的引用地址)
两个相同的数字:
都是 +0
都是 -0
都是 NaN
都不是0且不是NaN,并且值相同
Object.is与 ==运算符得到的结果不一样。==会在比较之前对符号两边的值进行强制类型转换(当他们类型不同时)。
Object.is与 ===运算符得到的结果也不一样。- 0 === + 0 是 true,而Number.NaN === NaN 是 false。
if (!Object.is) {
Object.is = function(x, y) {
// SameValue algorithm
if (x === y) { // Steps 1-5, 7-10
// Steps 6.b-6.e: +0 != -0
return x !== 0 || 1 / x === 1 / y;
} else {
// Step 6.a: NaN == NaN
return x !== x && y !== y;
}
};
}
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
?
// Special Cases
Object.is(0, -0); // false
Object.is(-0, -0); // true
Object.is(NaN, 0/0); // true
不支持ie
==、=== 、Object.is、 SameValueZero| x | y | == | === | Object.is | SameValueZero |
|---|---|---|---|---|---|
undefined |
undefined |
true |
true |
true |
true |
null |
null |
true |
true |
true |
true |
true |
true |
true |
true |
true |
true |
false |
false |
true |
true |
true |
true |
‘foo‘ |
‘foo‘ |
true |
true |
true |
true |
0 |
0 |
true |
true |
true |
true |
+0 |
-0 |
true |
true |
false |
true |
+0 |
0 |
true |
true |
true |
true |
-0 |
0 |
true |
true |
false |
true |
0 |
false |
true |
false |
false |
false |
"" |
false |
true |
false |
false |
false |
"" |
0 |
true |
false |
false |
false |
‘0‘ |
0 |
true |
false |
false |
false |
‘17‘ |
17 |
true |
false |
false |
false |
[1, 2] |
‘1,2‘ |
true |
false |
false |
false |
new String(‘foo‘) |
‘foo‘ |
true |
false |
false |
false |
null |
undefined |
true |
false |
false |
false |
null |
false |
false |
false |
false |
false |
undefined |
false |
false |
false |
false |
false |
{ foo: ‘bar‘ } |
{ foo: ‘bar‘ } |
false |
false |
false |
false |
new String(‘foo‘) |
new String(‘foo‘) |
false |
false |
false |
false |
0 |
null |
false |
false |
false |
false |
0 |
NaN |
false |
false |
false |
false |
‘foo‘ |
NaN |
false |
false |
false |
false |
NaN |
NaN |
false |
false |
true |
标签:expand javascrip 对象 函数实现 null 并且 使用 类型转换 undefined
原文地址:https://www.cnblogs.com/chaoxiZ/p/13084956.html