【问题标题】:Javascript validation/inspection: Detect the use of undeclared methods or properties of an objectJavascript验证/检查:检测对象未声明的方法或属性的使用
【发布时间】:2014-04-08 10:59:38
【问题描述】:

请考虑以下代码。

以下是根据JSLint或JSHint完全有效的Javascript代码:

function fun() {
    "use strict";
    var myvar = "";
    myvar.foo();
}

以下不是:

function fun() {
    "use strict";
    var myvar = "";
    foo();
}

为什么 JSLint(或 JSHint)没有检测到 myvar.foo() 之前没有声明,而它检测到 foo() 没有声明?有没有我错过的选项?

我希望在验证时检测到这些类型的错误。是否有另一个 javascript 工具可以检测对象内部未声明的属性或方法的使用,如上面示例中所述?

【问题讨论】:

  • 好吧,也许它声明为String.prototype.foo? JSLint 不知道这一点,也没有带来完整的类型系统。你可能想看看 TypeScript 或类似的东西。

标签: javascript jslint jshint


【解决方案1】:

所有 linter 只是准备好您的代码,它们不会运行它。在您的情况下,无法判断 myvar.foo 是否已定义。至于foo(),如果你在同一个文件中定义它,JSHint 会检测到它。否则不会。

【讨论】:

    【解决方案2】:

    Linters 只是解析/扫描您的代码中的“问题”。如果你真的想测试你的代码,你需要使用单元测试。

    喜欢 Qunit:https://qunitjs.com/

    JSLint 获取一个 JavaScript 源并对其进行扫描。如果发现问题, 它返回描述问题的消息和近似值 源内的位置。问题不一定是语法 错误,虽然它经常是。 JSLint 将一些样式约定视为 以及结构性问题。它并不能证明你的程序是 正确的。它只是提供了另一双眼睛来帮助发现问题。
    http://www.jslint.com/lint.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2017-02-19
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多