第一个按预期工作:
var f1 = Object.getOwnPropertyNames(Function)
.forEach(function(element) {
console.log (typeof Function[element]);
}); // --> number, string, function
第二个输出错误信息:
var f2 = Object.getOwnPropertyNames(Function.prototype)
.forEach(function(element) {
console.log (typeof Function.prototype[element]);
});
TypeError: 在严格模式下可能无法访问“caller”、“callee”和“arguments”属性
我怎样才能绕过它?
编辑:当前解决方法
var forbiddenOnStrictMode = ['caller', 'callee', 'arguments'];
var f2 = Object.getOwnPropertyNames(Function.prototype)
.forEach(function(element) {
if (forbiddenOnStrictMode.indexOf(element) == -1)
console.log (typeof Function.prototype[element]);
});
是否可以说 Node 编译器暂时忽略严格模式?
最佳答案
我在 Node v8.8.1 中的测试表明,像您所说的那样运行的简单文件不是在严格模式下运行的。我认为您看到的是一条有点误导性的错误消息。不是您正在运行的代码处于严格模式。您正在尝试访问 Function.prototype
上的某些内容,它本身被标记为在严格模式下定义,因此解释器拒绝让您访问该对象的这些属性。
Is it possible to say node-compiler ignore the strict mode for a while?
不,没有办法做到这一点。但这实际上不是你的问题。您可以使用以下代码测试您自己的代码是否处于严格模式:
const isStrict = (function() { return !this; })();
console.log("strict mode", isStrict);
你会发现node.js运行的一个简单文件并不是严格模式。您的问题是您正在尝试访问由 node.js 标记为严格模式定义的原型(prototype)。严格模式定义内置于 JS 实现中。它不是来自您代码中的严格模式。我不知道有什么方法可以改变它。我认为您将不得不采取变通办法。
关于javascript - 是否可以说 Node 编译器暂时忽略严格模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47980940/