实施标准 Javascript 类型
Implementing Standard Javascript Types
伙计们。
我正在研究(卡住的 ES5)企业编译器的实现,我得到了一些不错的实现,例如:
Object.prototype.isString = function () { return typeof this[0] === 'string' }
'asd'.isString (); // True
(123).isString (); // False
new Date ().isString (); // False
和
Date.prototype.getArray = function () {
var mm = this.getMonth () + 1;
var dd = this.getDate ();
var arr = new Array ();
arr.push (this.getFullYear ());
arr.push ((mm > 9 ? '' : '0') + mm);
arr.push ((dd > 9 ? '' : '0') + dd);
return arr;
};
var date = new Date ();
date.getArray ()[0]; // 2020 (Year)
date.getArray ()[1]; // 10 (Month)
date.getArray ()[2]; // 21 (Day)
我的问题是:我正在尝试实施 under snnipet,但没有得到相等比较结果。有人成功了吗?
Object.prototype.equals = function (toCompare) { return this === toCompare; }
对于感兴趣的人,我找到了答案on a @Jevgeni Kiski comment, thanks a lot for
Object.prototype.equals = function(x){
for (var p in this) {
if(typeof(this[p]) !== typeof(x[p])) return false;
if((this[p]===null) !== (x[p]===null)) return false;
switch (typeof(this[p])) {
case 'undefined':
if (typeof(x[p]) != 'undefined') return false;
break;
case 'object':
if(this[p]!==null && x[p]!==null && (this[p].constructor.toString() !== x[p].constructor.toString() || !this[p].equals(x[p]))) return false;
break;
case 'function':
if (p != 'equals' && this[p].toString() != x[p].toString()) return false;
break;
default:
if (this[p] !== x[p]) return false;
}
}
return true;
}
伙计们。
我正在研究(卡住的 ES5)企业编译器的实现,我得到了一些不错的实现,例如:
Object.prototype.isString = function () { return typeof this[0] === 'string' }
'asd'.isString (); // True
(123).isString (); // False
new Date ().isString (); // False
和
Date.prototype.getArray = function () {
var mm = this.getMonth () + 1;
var dd = this.getDate ();
var arr = new Array ();
arr.push (this.getFullYear ());
arr.push ((mm > 9 ? '' : '0') + mm);
arr.push ((dd > 9 ? '' : '0') + dd);
return arr;
};
var date = new Date ();
date.getArray ()[0]; // 2020 (Year)
date.getArray ()[1]; // 10 (Month)
date.getArray ()[2]; // 21 (Day)
我的问题是:我正在尝试实施 under snnipet,但没有得到相等比较结果。有人成功了吗?
Object.prototype.equals = function (toCompare) { return this === toCompare; }
对于感兴趣的人,我找到了答案on a @Jevgeni Kiski comment, thanks a lot for
Object.prototype.equals = function(x){
for (var p in this) {
if(typeof(this[p]) !== typeof(x[p])) return false;
if((this[p]===null) !== (x[p]===null)) return false;
switch (typeof(this[p])) {
case 'undefined':
if (typeof(x[p]) != 'undefined') return false;
break;
case 'object':
if(this[p]!==null && x[p]!==null && (this[p].constructor.toString() !== x[p].constructor.toString() || !this[p].equals(x[p]))) return false;
break;
case 'function':
if (p != 'equals' && this[p].toString() != x[p].toString()) return false;
break;
default:
if (this[p] !== x[p]) return false;
}
}
return true;
}