javascript - 是否可以说 Node 编译器暂时忽略严格模式?

标签 javascript node.js function strict-mode

第一个按预期工作:

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/

相关文章:

javascript - Canvas 闪烁

python - 如何使我修改后的 pandas/numpy .where 函数适应不同大小的列表参数?

c++ - 如何确定 VMT 指针的计数

python函数返回函数

javascript - jQuery-UI:未捕获的语法错误:意外的标记

javascript - 从嵌套函数返回值 - JavaScript

javascript - 在组合框中随机选择 1、3、5?

Node.js 节流流

mysql - 使用 Node 在 Lambda 上管理 RDS 连接

node.js - 部署 Cloud Functions 后出现错误 : Could not refresh access token.