【问题标题】:Suppress `Expected an identifier and instead saw 'default' (a reserved word)` in JSLint with Mongoose使用 Mongoose 在 JSLint 中抑制“期望一个标识符,而是看到“默认”(保留字)
【发布时间】:2012-06-11 18:22:06
【问题描述】:

我正在使用jshint 来验证我的 JavaScript 文件。

在服务器端,我将 node.js 与 Mongoose 一起使用。在 Mongoose 中,我被鼓励以如下方式编写模式:

var UserSchema = new mongoose.Schema({
    firstname : { type: String, default: '' }
});

运行 linting 时出现错误:

Expected an identifier and instead saw 'default' (a reserved word).

有没有办法抑制这个错误?我真的更喜欢这种行为而不是写作:

var UserSchema = new mongoose.Schema({
    firstname : { type: String, "default": '' }
});

【问题讨论】:

  • 从技术上讲,这是无效的 JS,尽管大多数环境似乎都允许这样做。我不确定 JSHint 中是否有配置选项。
  • 我真的明白这一点。为什么 Mongoose 建议我们写无效的 JS? ://
  • 只需将其放在引号中,然后继续。起初它也困扰着我,但现在我什至花时间思考它都觉得自己像个瘾君子。
  • @JohnnyHK 我现在也有这种感觉。继续前进。

标签: javascript node.js mongoose jslint jshint


【解决方案1】:

default 确实是 JavaScript 中的保留字 (https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words)。虽然从技术上讲,您可以毫无问题地在对象属性名称中使用默认值,但如果您的解释器是严格的(就像 lint 一样),您最终可能会遇到该表示法的问题。

最简单的前进方式:通过添加引号来解决问题。 Lint 不会再抱怨你了。代码长了两个字符,但那又怎样 - linting 通过了,保证不会因为使用保留关键字而出现问题。

【讨论】:

    【解决方案2】:

    您也可以使用“es5”选项来禁止这种情况发生。

    见:http://jslinterrors.com/expected-an-identifier-and-instead-saw-a-a-reserved-word/

    【讨论】:

    • 也适用于“期望一个标识符,而是看到 'finally'(保留字)”。这是使用 AngularJS 的 Promise API 时的问题。
    • 如果您仍然看到此错误,那么您应该更新您的 JSHint 版本。自 2.0.0 起,es5 选项已默认启用,但我仍然看到来自此答案的链接文章的大量推荐。
    猜你喜欢
    • 2016-12-31
    • 2012-06-05
    • 2011-04-13
    • 2018-05-09
    • 2014-11-27
    • 2011-06-08
    • 2015-07-14
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多