考虑一个说明性的例子:

function addSafely(weakset, value) {
    if (canBeAddedToWeakSet(value)) {
        weakset.add(value);
    }
}

那么,您认为在这种情况下实现canBeAddedToWeakSet函数的简洁正确的方法是什么?性能也是不错的选择。

我现在使用以下实现,但是我不确定它是否完整(即涵盖所有情况):
function canBeAddedToWeakSet(value) {
    return !!value && (typeof value === 'object' || typeof value === 'function');
}

UPD:因此,以下是一些对性能感到好奇的基准测试结果。
  • https://measurethat.net/Benchmarks/ShowResult/6648(Chrome 61,Xubuntu 16.04)
  • https://measurethat.net/Benchmarks/ShowResult/6649(Firefox 52.3 ESR,Xubuntu 16.04)
  • 最佳答案

    请参阅ECMAScript 2015 (6th Edition, ECMA-262) WeakSet.add()



    如第4项所述,它将检查valuetype (ECMAScript Language Types)是否为Object,因为typeof null也是“对象”,因此canBeAddedToWeakSet函数应为:

    function canBeAddedToWeakSet(value) {
        return value !== null && (typeof value === 'object' || typeof value === 'function');
    }
    

    08-07 08:51