声明: 这是出于学习目的,我已经知道为js内置对象添加方法不是一个好习惯。
我试图为一个小型爱好项目添加一个新方法到数组原型:
Array.prototype.add = function (element) {
console.log('array before: ' + JSON.stringify(this));
let arr = this;
if (arr.length) {
let set = new Set(arr);
console.log('set before: ' + JSON.stringify(set));
console.log('adding element: ' + JSON.stringify(element));
set = set.add(element);
console.log('set after: ' + JSON.stringify(set));
} else {
arr.push(element);
}
console.log('array after: ' + JSON.stringify(arr));
};
一旦按预期推送,尝试调用新方法。在连续调用"数组之前:"日志按照预期打印,第一次按下组成数组的内容,但是将数组提供给我的Set构造函数会产生一个空集,正如我之前设置的那样:"设置之前:"并且"设置在:"记录打印空{}
。我不确定为什么Set不会从数组中实例化,任何帮助都会受到赞赏。
答案 0 :(得分:1)
JSON.stringify
始终会为集合
var s = new Set([1,2,3]);
console.log(s.size);
console.log(JSON.stringify(s));
集合没有可序列化的属性。换句话说,您使用错误的方法来验证集合是否为空并且跳到了错误的结论。请改为记录set.size
,或仅记录set
。