我正在阅读凯尔·辛普森(Kyle Simpson)的《你不知道JS:ES6及更高版本》,对第一章有疑问:https://github.com/getify/You-Dont-Know-JS/blob/master/es6%20%26%20beyond/ch1.md
我在名为Shims / Polyfills的部分
有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