如何防止访问尚不存在的对象属性

时间:2012-12-07 05:50:17

标签: javascript

我经常遇到这种情况:

var obj = { field: 2 };

并在代码中:

do_something( obj.fiel ); // note: field spelt wrong

即属性输入错误。我想尽早发现这些错误。

我想密封物体,即 obj = Object.seal(obj);

但这似乎只能防止像obj.fiel = 2;这样的错误,并且在简单读取字段时不会抛出错误。

是否有任何方法可以锁定对象,以便检测并抛出对缺失属性的读取权限?

感谢, 保罗

编辑:有关情况的进一步信息

  1. 普通的javascript,没有编译器。
  2. 没有经验的程序员用于数学计算目的的库。我想限制他们的错误。我可以发现一个拼错变量,但他们不能。
  3. 希望尽早发现尽可能多的错误。即在编译时(最佳),在运行时遇到错误拼写时出现抛出错误(ok),或者在分析结果并发现错误的计算输出时(非常非常糟糕)。
  4. 单元测试实际上不是一个选项,因为数学的目的是发现新知识,因此通常不会提前知道数学的答案。而且,没有经验的程序员很难教他们单元测试。

2 个答案:

答案 0 :(得分:1)

我不认为这会在Javascript中起作用,因为对象是像JSON一样编写的,因此属性将是未定义的或null但不会抛出错误。

解决方案是编写本机getter / setter。

var obj = {
    vars: {},

    set: function(index, value) {
        obj.vars[index] = value;
    },

    get: function(index) {
        if (typeof(vars[index]) == "undefined") {
            throw "Undefined property " + index;
        }

        return vars[index];
    }
};

答案 1 :(得分:0)

现在javascript中没有可靠的getter / setter。你必须手动检查它。这是一种方法:

if (!('key' in object)) {
    // throw exception
}