仅使用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 ]