const hasAddr = new WeakSet();//引用类型可能会引用同一个地址,使用WaekSet因为他是弱引用,当没有没有引用的时候会被js回收
const calcArg = obj => {
const typeArg = typeof obj;
switch (typeArg) {
case
return 2 * obj.length;
case
return 8;
case
return 4;
case
if (Array.isArray(obj)) { //低版本校验:Object.prototype.toString.call(val) === "[object Array]"
return obj.map(calcArg).reduce((size, v) => size + v, 0)
} else {
//对象类型
if (obj === null) return 0
let byte = 0;//内存计数
let keys = Object.keys(obj); //键值存储也需要计算
for (let key = 0; key < keys.length; key++) {
if (obj[key] === null) continue
if (typeof obj[key] ===
if (hasAddr.has(obj[key])) continue
hasAddr.add(obj[key]);
}
byte += calcArg(obj[keys[key]]);
byte += calcArg(keys[key])
}
return byte
}
}
}
console.log(calcArg({
a:111,
b:
2222:false,
}))