gpt4 book ai didi

javascript - 如何预先检查在将值添加到 JavaScript 中的 WeakSet 时不会抛出异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:40:26 26 4
gpt4 key购买 nike

考虑一个说明性的例子:

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()

23.4.3.1 WeakSet.prototype.add ( value )

The following steps are taken:

  1. Let S be the this value.

  2. If Type(S) is not Object, throw a TypeError exception.

  3. If S does not have a [[WeakSetData]] internal slot, throw a TypeError exception.

  4. If Type(value) is not Object, throw a TypeError exception.

  5. Let entries be the List that is the value of S’s [[WeakSetData]] internal slot.

  6. Repeat for each e that is an element of entries,

    • If e is not empty and SameValue(e, value) is true, then
      • Return S.
  7. Append value as the last element of entries.

  8. Return S.

正如项目 4 所说,它检查 type (ECMAScript Language Types) value 是否为Object,因为typeof null 也是'object',所以函数canBeAddedToWeakSet 应该是:

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

关于javascript - 如何预先检查在将值添加到 JavaScript 中的 WeakSet 时不会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46340150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com