仅使用JavaScript代理向数组添加偶数

我正在学习 JavaScript 代理。

通过使用设置陷阱,我只想向数组添加偶数。但每次扔

未捕获的类型错误:代理上的“设置”:陷阱返回属性“长度”的错误

这是我的代码示例。

//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为这两种情况返回,因为

返回值

set()方法应该返回一个布尔值。

  • 返回 true表示赋值成功。
  • 如果set()方法返回false,并且赋值发生在严格模式代码中,则会抛出TypeError。

push调用代理两次,一次是推送值,另一次是更改length属性。为了避免在此代理中进行不必要的更多操作,您可以使用此不需要的属性提前退出。

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代理向数组添加偶数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>