替代代理例外

时间:2017-10-10 22:00:17

标签: javascript ecmascript-6 es6-proxy

top_r_cuisine捕获一个赋值但未确认它时,如果出现严格模式,则抛出Proxy。但是我要滥用代理,而是需要TypeError

如何在第二次通话中获得ReferenceError

ReferenceError

PS:Same question in Russian.

1 个答案:

答案 0 :(得分:0)

严格模式ReferenceError仅在没有此类变量a时才会发生。在with ({a: …}) a = …;,总有一个。围绕仅截取分配的对象的代理不会改变任何相关内容。

您唯一能做的就是从对象中删除a属性,或让代理行为就好像它没有这样的属性:new Proxy({a: …}, {has(){ return false; }})。这两者都将以严格模式导致ReferenceError。但是,这也意味着在草率模式下,它们将导致创建一个全局变量,这可能是不可取的。

严格模式TypeError仅在变量被视为不可变时发生,例如constwith语句,不可写属性 - 具有writable: false的数据属性,没有setter的附件属性,或任何其他对象,如{{ {1}}返回[[Set]]。要避免它,false陷阱中的return true或使用在目标对象上分配属性的默认陷阱。

这两个例外是唯一依赖于严格模式的例外,你不能拦截它们,而只能引导它们通过代理的其他行为。当然,您也可以从陷阱中抛出异常,但这些异常不依赖于严格模式。