Javascript '的价值是什么;这';从对象文字上的箭头函数返回

Javascript '的价值是什么;这';从对象文字上的箭头函数返回,javascript,node.js,arrow-functions,Javascript,Node.js,Arrow Functions,在nodejs中运行时,从对象文本上的箭头函数返回的值是多少。这个问题被问到了,但是答案在nodejs中并不正确。在严格模式下,它不是全局的,也不是未定义的 下面是我正在运行的代码片段: "use strict"; // <-- Has no affect. let a = { f: () => this }; console.log(a.f()) // {} console.log(a.f() === global);

在nodejs中运行时,从对象文本上的箭头函数返回的值是多少。这个问题被问到了,但是答案在nodejs中并不正确。在严格模式下,它不是全局的,也不是未定义的

下面是我正在运行的代码片段:

"use strict";  // <-- Has no affect.
let a = {
  f: () => this
};

console.log(a.f())                          // {}
console.log(a.f() === global);              // false
console.log(a.f() === {});                  // false
console.log(a.f() === Object.create(null)); // false
现在,将上面字符串中的代码内容复制到script.js中,并通过以下方式运行:

node script.js  // returns false

您与
{}
对象的比较。create(null)
永远不会是
true
,因为新创建的对象永远不能与其他对象相同,因为它们是通过引用进行比较的。
a.f()==global
非常有趣。@4castle!你能在你的本地节点上运行一下吗,看看你是否得到了同样的结果?还有一些奇怪的事情。当我在MacOS上的节点REPL中键入上述代码时,a.f()确实返回global。通过MacOS和Linux上的节点可执行文件运行它,它返回{}。this关键字的值是可变的,取决于函数的调用方式。对于arrow函数,函数会记住定义它的上下文
节点模块中的此
似乎是一个普通对象。还要注意,在JavaScript中,
{}!=={}
(两个不同的对象不相等!)
node script.js  // returns false