【问题标题】:How to get the "with" statement feature in strict mode?如何在严格模式下获得“with”语句功能?
【发布时间】:2014-09-03 09:13:27
【问题描述】:

将 Javascript 置于严格模式时,不再允许使用“with”语句。我怎么能复制它的目的?

例如,让它在搜索变量之前搜索数组...

        var a = {x:1, y:2};
        var x = 3;
        with (a) {
            console.log(x);
        }

控制台将显示 1。但在严格模式下,必须删除“with”。如果控制台语句在它之外,它将显示 3。

【问题讨论】:

  • 不要。他们出于某种原因在严格模式下将其关闭。或者,禁用严格模式。
  • 我怎样才能用上锁的枪射自己的脚?你不能。这就是重点!!!!
  • with 是一场噩梦。不要使用它。
  • 来自with docs - 不推荐使用 with 语句,因为它可能是混淆错误和兼容性问题的根源。有关详细信息,请参阅下面“描述”部分中的“歧义骗局”段落。
  • @cookiemonster - 它会产生歧义。比如with中的console.log应该会报错,因为没有a.console,但它确实有效。

标签: javascript with-statement strict


【解决方案1】:

你不能

来自MDN with docs

不推荐使用with,并且在 ECMAScript 5 严格模式下被禁止。推荐的替代方法是将要访问其属性的对象分配给临时变量。

【讨论】:

    【解决方案2】:

    严格模式重新定义了 Javascript 的某些部分,目的是消除一些歧义和不兼容性。您不能 use strict 然后期望受影响的语言项目仍然可用。

    with 的使用会导致变量范围的歧义 - 在您的示例中已经很明显 - 并且与 ES6 及更高版本中的提议标准不向前兼容。您可以在 MDN 网站here 上找到更完整的讨论

    在您的具体示例中,您始终可以console.log(a.x);

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 2020-05-23
      • 2010-10-18
      • 2020-06-12
      • 2018-05-29
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多