https://github.com/getify/You-Dont-Know-JS/blob/master/es6%20%26%20beyond/ch1.md
我在一个叫填隙片/填充胶的地方
那里
Object.is
定义为:
if (!Object.is) {
Object.is = function(v1, v2) {
// test for `-0`
if (v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
// test for `NaN`
if (v1 !== v1) {
return v2 !== v2;
}
// everything else
return v1 === v2;
};
}
我尝试了几个案例:
Object.is(âabcâ, âabcâ);
Object.is(1/0, Infinity);
Object.is(NaN, NaN);
而且效果很好。但是,我有一个想法,就是将其设置为对象级别
function
也:
Object.prototype.is = function(value) {
return Object.is(this, value);
}
然而,如果我打电话
Object.is('abc', 'abc')
这将正确返回
true
. 如果我打电话
'abc'.is('abc')
这是回报
false
. 有人能解释一下为什么我
Object.prototype.is
不等于
Object.is
?
严格模式解决了这个问题:
"use strict";
if (!Object.is) {
Object.is = function(v1, v2) {
// test for `-0`
if (v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
// test for `NaN`
if (v1 !== v1) {
return v2 !== v2;
}
// everything else
return v1 === v2;
};
}
Object.prototype.is = function(value) {
return Object.is(this, value);
}
'abc'.is('abc'); //true