比严格模式更严格?

Stricter than strict mode?

我最近产生了一个愚蠢的错误:

"use strict";

function doSomething() {
    let testObject = {a: "foo", b: "bar", parent: "bla"};

    if (parent in testObject) {
        console.log("has a parent")
    }
    else {
        console.log("does not have a parent")
    }
}

doSomething();

由于文字 parent 周围缺少引号,解释器访问了 window.parent 并且没有 ReferenceError,就像我写的 a in testObject.

显然,JavaScript 不知道我的意图不是访问 window.parent,因此不可能抛出错误。但我想知道在这种情况下是否有某种调试模式会向控制台输出警告,大致如下:“parent 未在此范围内定义,而是访问全局变量”。

不,JavaScript 没有“更严格”的模式来警告您这一点。有些 linters 可能(虽然 ESLint 似乎没有,至少在演示页面的默认设置下)。

TypeScript would have, though (example),因为 window.parent 不是字符串或符号,所以作为 in 的 left-hand 操作数没有意义。采用 TypeScript 当然有成本,但它确实有这样的好处。

不,没有比严格模式更严格的了。