Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当一个新属性被添加到一个给定的对象时,有没有办法让Javascript抛出一个错误?_Javascript_Ecmascript 5 - Fatal编程技术网

当一个新属性被添加到一个给定的对象时,有没有办法让Javascript抛出一个错误?

当一个新属性被添加到一个给定的对象时,有没有办法让Javascript抛出一个错误?,javascript,ecmascript-5,Javascript,Ecmascript 5,并防止向对象添加未知属性,但这些属性会自动失败,而不是抛出错误。有没有办法强迫他们犯错 var myObj = Object.seal({}); try{ myObj.someProp = 17; console.log("I don't want to reach this message"); }catch(err){ console.log("I want an error to occur instead.") console.log("Or at lea

并防止向对象添加未知属性,但这些属性会自动失败,而不是抛出错误。有没有办法强迫他们犯错

var myObj = Object.seal({});
try{
    myObj.someProp = 17;
    console.log("I don't want to reach this message");
}catch(err){
    console.log("I want an error to occur instead.")
    console.log("Or at least get a warning somewhere.");
}

我在Chrome19和Firefox9中测试了这一点。我也不介意特定于浏览器的解决方案,因为我只需要在开发过程中使用它。

如果严格模式是一个选项,Object.seal似乎可以做到这一点(至少在Firefox中):

尝试删除或向密封对象添加属性,或将数据属性转换为访问器,或将数据属性转换为访问器或反之亦然,都会以静默或抛出TypeError的方式失败(在严格模式代码中,最常见的情况是,尽管不是排他)

效果相当不错:

(顺便说一句:preventExtensions()的工作原理相同)

根据(和)如果启用严格模式,则在尝试修改密封对象时将抛出TypeError:

函数go(){ "严格使用",; var x={}; 对象.印章(x); x、 foo=123; } go();//=>TypeError:无法添加属性foo,对象不可扩展
对我来说,在Chrome中,
对象。preventExtensions
确实会在您尝试添加属性时引发异常。@torazaburo:您使用的是严格模式吗?它只在严格模式下工作。