JSLint突然报道:使用"use strict"的功能形式

Zha*_*ami 918 javascript jslint

我包括声明:

"use strict";
Run Code Online (Sandbox Code Playgroud)

在我的大多数Javascript文件的开头.

JSLint之前从未对此提出过警告.但现在是,说:

使用"use strict"的功能形式.

有谁知道"功能形式"会是什么?

bdu*_*kes 998

包含'use strict';在包装函数中的第一个语句,因此它只影响该函数.这可以防止在连接不严格的脚本时出现问题.

请参阅Douglas Crockford的最新博客文章Strict Mode Is Coming To Town.

该帖子的示例:

(function () {
   'use strict';
   // this function is strict...
}());

(function () {
   // but this function is sloppy...
}());
Run Code Online (Sandbox Code Playgroud)

更新: 如果您不想包装立即函数(例如,它是节点模块),则可以禁用警告.

对于JSLint(每个Zhami):

/*jslint node: true */
Run Code Online (Sandbox Code Playgroud)

对于JSHint:

/*jshint strict:false */
Run Code Online (Sandbox Code Playgroud)

或(根据Laith Shadeed)

/* jshint -W097 */
Run Code Online (Sandbox Code Playgroud)

要禁用JSHint中的任意警告,请检查JSHint源代码中的映射(文档中的详细信息).

更新2: JSHint支持node:boolean选项.见.jshintrcgithub.

/* jshint node: true */
Run Code Online (Sandbox Code Playgroud)

  • 但是,这对Node应用程序没有意义.`-1` (10认同)
  • @Noumenon它不是真正的样板,它是一个改变你的代码运行环境的指令.也就是说,默认情况下新的ES6语法(模块和类)是严格的(参见http://www.ecma-international.org/ ecma-262/6.0 /#sec-strict-mode-code),所以今后不需要乱七八糟.在此期间,您可以将所有代码包装在[IIFE](http://benalman.com/news/2010/11/immediately-invoked-function-expression/)中,只需指定`"use strict" ;`每个文件一次. (2认同)

Zha*_*ami 217

如果您正在为NodeJS编写模块,那么它们已经封装了.通过在文件顶部包含来告诉JSLint你有节点:

/*jslint node: true */
Run Code Online (Sandbox Code Playgroud)

  • 用JSHint v2.9.2为我担心.添加了""node":true`到.jshintrc (3认同)
  • 仅供参考,此选项适用于JSLint,但JSHint不会使用此指令关闭严格性警告.对于JSHint,请尝试`/*jshint strict:false*/` (2认同)

Tho*_*enz 70

我建议改用jshint.

它允许通过禁止此警告/*jshint globalstrict: true*/.

如果您正在编写库,我建议使用global strict,如果您的代码被封装到模块中,就像nodejs一样.

否则,您将强制使用您的库的每个人进入严格模式.

  • 仅供参考:JSHint中的globalstrict选项已更改.现在尝试`strict:'global'`,并查看http://jshint.com/docs/options/#globalstrict (4认同)

qri*_*ris 17

我开始在Cross Platform JavaScript博客文章后创建一个Node.js/browserify应用程序.我遇到了这个问题,因为我全新的Gruntfile没有通过jshint.

幸运的是,我在Leanpub的Grunt书中找到了答案:

如果我们现在尝试,我们将扫描我们的Gruntfile ...并得到一些错误:

$ grunt jshint

Running "jshint:all" (jshint) task
Linting Gruntfile.js...ERROR
[L1:C1] W097: Use the function form of "use strict".
'use strict';
Linting Gruntfile.js...ERROR
[L3:C1] W117: 'module' is not defined.
module.exports = function (grunt) {

Warning: Task "jshint:all" failed. Use --force to continue.
Run Code Online (Sandbox Code Playgroud)

这两个错误都是因为Gruntfile是一个Node程序,默认情况下JSHint不识别或允许使用module和字符串版本use strict.我们可以设置一个接受我们的Node程序的JSHint规则.让我们编辑我们的jshint任务配置并添加一个选项键:

jshint: {
  options: {
    node: true
  },
}
Run Code Online (Sandbox Code Playgroud)

添加node: true到jshint options,将jshint放入"节点模式",为我删除了两个错误.


Sah*_*uja 16

使用以下内容在项目的根目录中添加文件.jslintrc(在jshint的情况下为.jshintrc):

{
    "node": true
}
Run Code Online (Sandbox Code Playgroud)


gly*_*ave 15

字符串形式没有天生的错误.

不要因为担心连接非严格的javascript而避免使用"全局"严格形式,而是修复该死的非严格javascript可能更为严格.