当尝试更改它时,有没有办法让"Object.frozen"对象抛出警告?

Mil*_*osz 16 javascript console warnings object

我使用Object.freeze作为防止自己违反自己规则的手段.当我试图做出错误的任务时,我希望Object.freeze能和我说话.但是,Object.freeze只是让分配无声地失败!例如,如果我这样做

/*
 * Frozen singleton object "foo".
 */
var foo = (function() {
  var me = {};

  me.bar = 1;

  if (Object.freeze) {
    Object.freeze(me);
  }

  return me;
})();

foo.bar = 2;
console.log(foo.bar);
Run Code Online (Sandbox Code Playgroud)

控制台将记录"1",但我不知道我做了一个错误的任务.这当然会导致我的代码中出现危险的意外行为,当冻结对象的整个点是为了避免意外.事实上,我更有可能通过不冻结对象,让错误的分配发生,以及稍后由于错误的值导致我的代码失败而得到详细的错误输出.

我想知道JavaScript是否在任何浏览器中都有任何隐藏的"不可变对象警告"编译指示,以便我可以知道何时尝试改变"Object.frozen"对象.

Fel*_*her 20

TypeError尝试分配给不可写属性时,严格模式下的代码将抛出一个(ECMA-262:11.13.1).但请注意,您不能依赖于不完全支持ES5严格模式的浏览器(例如IE9)中引发的错误.

要使代码以严格模式运行,请'use strict';在包含代码的JS文件或函数的开头添加,并在实现严格模式的环境中运行它(请参阅此列表:http://caniuse.com/#feat= use-strict).