JavaScript:防止无意中创建新属性

时间:2014-08-04 09:20:49

标签: javascript error-detection

错别字发生了,有时候很难用JavaScript跟踪它们。以此为例(想象一下在更多代码之间):

// no error. I would like a warning
document.getElementById('out').innerHtml = "foo";

对于未声明的变量,严格模式有助于:

"use strict";
var myHTML = "foo";
myHtml = "bar"; // -> error

但它不适用于上面的例子。是否有可以捕获这些错误的程序或模式?我尝试过JSLint和JavaScript Lint,但他们没有抓住它。

理想情况下,我希望这仍然可以工作(没有警告):

// should work (without warning)
function MyClass(arg) {
  this.myField = arg;
}

2 个答案:

答案 0 :(得分:1)

嗯,这就是动态类型编程语言的代价。因为可以在运行时添加属性,所以没有真正的解决方案来检测代码中的拼写错误。

然而,您可以向innerHtml原型添加Element函数,在内部调用innerHTML以消除某些拼写错误,但我绝对不会建议这样做。

正如其他评论已经提出的:一个好的IDE可以帮助您识别拼写错误。我只使用WebStorm和VisualStudio,它们都能够检测未声明或未使用的功能。

答案 1 :(得分:1)

使用像WebStorm这样的IDE有助于检测这类错误。

为防止意外地向对象添加属性,您可以将其冻结: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

使用ES6,您可以使用代理来检测这些错误: http://www.nczonline.net/blog/2014/04/22/creating-defensive-objects-with-es6-proxies/

相关问题