是否可以说节点编译器暂时忽略严格模式?

Is it possible to say node-compiler ignore the strict mode for a while?

第一个按预期运行:

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]);
});

节点编译器可以暂时忽略严格模式吗?

我在节点 v8.8.1 中的测试表明,像您所说的简单文件 运行 未处于严格模式。我认为您看到的是一条有点误导性的错误消息。处于严格模式的不是您 运行ning 中的代码。您正在尝试访问 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 标记为严格模式定义的原型。严格模式定义内置于 JS 实现中。它不是来自您代码中的严格模式。我不知道有什么方法可以改变它。我认为您将不得不采取变通办法。