考虑一个说明性的例子:
function addSafely(weakset, value) {
if (canBeAddedToWeakSet(value)) {
weakset.add(value);
}
}
那么,您认为在这种情况下实现
canBeAddedToWeakSet
函数的简洁正确的方法是什么?性能也是不错的选择。我现在使用以下实现,但是我不确定它是否完整(即涵盖所有情况):
function canBeAddedToWeakSet(value) {
return !!value && (typeof value === 'object' || typeof value === 'function');
}
UPD:因此,以下是一些对性能感到好奇的基准测试结果。
最佳答案
请参阅ECMAScript 2015 (6th Edition, ECMA-262) WeakSet.add()
如第4项所述,它将检查value
的type (ECMAScript Language Types)是否为Object
,因为typeof null
也是“对象”,因此canBeAddedToWeakSet
函数应为:
function canBeAddedToWeakSet(value) {
return value !== null && (typeof value === 'object' || typeof value === 'function');
}