比严格模式更严格?
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 当然有成本,但它确实有这样的好处。
不,没有比严格模式更严格的了。
我最近产生了一个愚蠢的错误:
"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 当然有成本,但它确实有这样的好处。
不,没有比严格模式更严格的了。