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

JavaScript: prevent unintentional creation of new property

本文关键字:属性 新属性 创建 无意中 JavaScript      更新时间:2023-09-26

错别字时有发生,有时在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;
}

使用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/

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

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

正如其他注释所建议的那样:一个好的IDE可以帮助您识别错别字。我只使用WebStorm和VisualStudio,它们都能够检测未声明或未使用的函数。