gpt4 book ai didi

javascript - 仅使用 JavaScript 代理将偶数添加到数组

转载 作者:行者123 更新时间:2023-12-03 21:42:50 26 4
gpt4 key购买 nike

我正在学习 JavaScript 代理。
通过使用 设置陷阱我只想将偶数添加到数组中。但每次抛出

Uncaught TypeError: 'set' on proxy: trap returned falsish for property'length'


这是我的代码示例。

//Only even numbers will be added here. We are using Js Proxy

let evenNumbers = [];

evenNumbers = new Proxy(evenNumbers, {
set(target, p, value, receiver) {
if ( (value % 2) === 0 ) {
target[p] = value;
return true
}else {
return false;
}

}
});

evenNumbers.push(2);

最佳答案

您需要返回 true对于这两种情况,因为

Return value

The set() method should return a boolean value.

  • Return true to indicate that assignment succeeded.
  • If the set() method returns false, and the assignment happened in strict-mode code, a TypeError will be thrown.
push调用代理两次,一次是通过推送值,另一次是更改 length属性(property)。为避免在此代理中进行不必要的更多操作,您可以使用此不需要的属性提前退出。

let evenNumbers = [];

evenNumbers = new Proxy(evenNumbers, {
set (target, p, value, receiver) {
if (p === 'length') return true; // exclude this property
if (value % 2 === 0) {
target[p] = value;
}
return true;
}
});

evenNumbers.push(2);
console.log(evenNumbers.length); // 1
evenNumbers.push(3);
console.log(evenNumbers.length); // Still 1
console.log(evenNumbers); // [ 2 ]

关于javascript - 仅使用 JavaScript 代理将偶数添加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66459689/

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