问题标签 [strict-mode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
214 浏览

javascript - 在严格模式下删除 HTMLElement

我有一个不那么小的图像,我像这样预加载了它。

上面的代码,在严格模式下给了我这个错误

严格模式下不允许对表达式调用 delete

我知道为什么在严格模式下不允许删除。我的查询是

  1. 这不会占用内存/资源空间吗?
  2. 如果是这样,有没有办法删除它?

PS: someObject.img = createElm 然后删除属性是更好的选择吗?

0 投票
2 回答
50 浏览

javascript - 有只支持严格模式的js环境吗?

我目前正在开发一个依赖于arguments.callee.caller. 这与 不兼容"use strict",因此当调用者函数以严格模式定义时会引发错误。我发现了这些错误,它们并不重要,因为重要的部分不是在严格模式下定义的。是否存在只支持严格模式的环境,因此与此库不兼容?

0 投票
2 回答
6372 浏览

properties - 无法在 Drools 6.4 中使用严格模式解析方法

我们正在将 drools 版本从 5.x 迁移到 6.4,并且我们使用了我们之前使用的所有类和方法,除了编译问题,例如移动到新包等。

当我们在 Maven 中构建 DT 文件(xls)时,我遇到了以下问题。

注意 - 用户类遵循 Java Bean 标准。

我也尝试禁用 Maven 方言,如下所示

但是发生了同样的错误。请帮我修复,我不确定,这与方言有关或需要更改 DT 文件。

非常感谢。

0 投票
1 回答
3340 浏览

javascript - babel-loader:模块构建失败:SyntaxError:在严格模式下删除局部变量

我正在使用babel-loaderwebpack定义 babel-plugin 将一些第三方代码转换为可以毫无问题地通过 Webpack 捆绑器的格式。但是,当我的代码通过 babel 的解析器 (babylon) 运行以构建 AST 时,我收到以下错误:

Module build failed: SyntaxError: Deleting local variable in strict mode

我在 bablyon 中找到了触发此消息的行:https ://github.com/babel/babylon/blob/master/src/parser/expression.js#L236

查看该代码,似乎我应该能够通过设置为来禁用巴比伦中的严格模式this.state.strict解析false。问题是我不知道如何this.state.strictbabel-loader. 我希望其他人对此有更多了解。

以下是我迄今为止尝试过的一些事情:

  1. strict: false并且strictMode: falsequery

    /li>
  2. strict: falsestrictMode: false带有插件

    /li>
  3. 在内部设置state.opts.strict为 false (但这不应该工作,因为巴比伦解析代码并在传递 AST 进行遍历之前失败)Programcustom-plugin.js

    /li>
  4. blacklistwebpack.config.jsand中使用.babelrc(在 babel v6 中已删除,因此无论如何这都不应该工作)

    /li>

我可以想到一些解决这个问题的 hacky 解决方案,但是这个标志应该可以通过babel-loader.babelrc以某种形式在表面上访问。

0 投票
3 回答
10357 浏览

javascript - React DnD:避免使用 findDOMNode

我不完全理解它,但显然不建议使用 findDOMNode()

我正在尝试创建拖放组件,但我不确定我应该如何从组件变量访问 refs。这是我目前拥有的一个例子:

资源

编辑

这可能是由于我的组件既是拖放源又是目标,因为我可以让它在这个例子中工作,但不是这个

0 投票
1 回答
388 浏览

javascript - 如何为我的整个包启用严格模式但不为依赖项启用?

我曾经在我的 JavaScript 文件中写"use strict";为第一行来启用严格模式。现在我不想将它作为样板代码添加到我当前 NodeJs 包的 200 多个 JavaScript 文件中。

有什么方法可以强制我的包的所有文件使用严格模式而不强制它用于我的包的依赖项?

编辑: 这已被标记为关于如何在 node 中强制严格模式的一般问题的重复项。这不是重复的,因为这个问题更具限制性:通过向每个文件添加行来不强制,并且在强制依赖时也不强制。

0 投票
0 回答
293 浏览

javascript - 我需要帮助理解 JavaScript “严格模式”

这些天我写的 JavaScript 比以前多得多。我正在为我们的产品编写一堆 JavaScript 库。想要尽可能小心,我正在做完整的 jsdoc 评论等。我也有“使用严格”;在我所有的库和函数中。

我们正在使用 jQuery 和 Kendo UI(没有评论这些是好、坏还是无关紧要,这艘船已经航行了)。这两个库都有他们创建的全局变量,至少分别有“$”和“kendo”。我正在使用带有 Resharper 的 Visual Studio,所以我在编写 JavaScript 时得到了很多帮助。

现在,这是我的困惑。在我的库中,它们位于 LibraryName.js 之类的文件中,我必须同时使用 jQuery 函数和 kendo 函数,所以我正在执行 $.ready(...) 和 kendo.keys.SPACEBAR 之类的操作。Visual Studio 让我对没有在严格模式下定义的“kendo”感到悲痛,它让我对 $.ready 没有被定义感到悲痛,但它不会让我对 $ 没有被定义感到悲痛?为什么特别?

我知道,这是一件小事,但我真的很想了解严格模式的含义以及限制是什么。

谢谢阅读!

补充:显然我不是很清楚,所以我会尝试扩展。在严格模式下,“...例如,您不能使用未声明的变量。” 好吧,我看不出一个库文件(例如 mySuperLibrary.js)如何在不使用“未声明的变量”的情况下使用另一个库文件(jQuery 或 Kendo UI)中的全局值,因为 $ 是一个包含函数的变量,而 kendo 是出色地。显然,这些都没有在我的脚本中声明。

然后让我感到困惑的是,Resharper 抱怨 $.ready 将“准备好”标记为未声明,但没有说 $ 未声明。它还将剑道标记为未声明。它给我的警告是“在'严格模式'中不允许使用变量(属性或对象)而不声明它”。

现在,我的图书馆工作正常。它继续使用这些“未声明的变量”来解决它需要解决的问题。到我的库加载时,这些变量已被声明。

在任何其他语言中,我都会以某种方式在文件中记录我需要定义的外部全局变量。我在 JavaScript 中看不到任何方法可以做到这一点。没有任何类型的“进口”或“外部要求”。我想我想知道我是否只是错过了一些东西。没有办法阻止它打扰我(所以问题可能是我的强迫症,不希望我的库出现“假”错误)。

0 投票
2 回答
2583 浏览

javascript - 如何在严格模式下获取函数名[正确方式]

arguments.callee不幸的是deprecated,并且在“严格模式”下使用它会引发错误。

是否有任何新的适当(标准)替代方法可以在实际函数中获取函数名称? 还是会出现在未来的 ECMA6、7 计划中?

最近的答案只不过是肮脏的黑客,我的回答是不可接受的。

arguments.callee.caller.name也不工作(nodejs v7.5.0 )

0 投票
2 回答
2529 浏览

javascript - 在严格模式下更改变量的类型

在对 PluralSight 进行关于 JavaScript 的测验时,我遇到了这个问题:

假设您启用了严格性,您可以在定义后更改变量的类型吗?

  • 可以,没有限制
  • 是的,但你必须重新定义变量

正确答案是否定的。也许我对这个问题的理解是错误的,但对我来说,这表明以下代码无效:

在 Chrome、Firefox 和 Edge 中进行的快速测试可以完美运行上述代码。我还查看了ECMAScript 2016 规范中的附件 C (假设这是正确的文档),并且没有发现在严格模式下限制变量类型的内容。

我是否在这里遗漏或误解了某些内容,或者问题是否存在缺陷或可能具有误导性?

0 投票
1 回答
1093 浏览

node.js - 在严格模式下使用 vm 运行 node.js 脚本时未定义导出

我在许多模块中看到了这段代码:

但是我在严格模式下使用Node.js VM执行这些模块时遇到了一些问题。

这里有一个演示:

如果我运行此代码,我会收到exports is not defined错误消息。没有use strict上面的代码可以正常工作。

为什么类似的声明适用于标准 Node 模块,但不适用于 vm 脚本?我应该以不同的方式声明上下文吗?