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

时间:2012-02-02 20:39:31

标签: javascript object console warnings

我使用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);

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

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

1 个答案:

答案 0 :(得分:20)

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

要使代码以严格模式运行,请在包含代码的JS文件或函数的开头添加'use strict';,并在实现严格模式的环境中运行它(请参阅此列表:{{3 }})。