【发布时间】:2018-09-20 17:45:41
【问题描述】:
我正在查看规范:
我已经看到 JS 代码这样做了:
var a = function(){}
var b = function(){}
var c = a;
console.log(a === b);
console.log(a === c);
代码按预期工作,它似乎使用严格相等 - 它不会将函数转换为字符串然后比较字符串 - 这太疯狂了 - 它使用内存地址或类似 Java 的东西,对吧?
它实际上是如何工作的?有人知道吗?规范似乎没有提到函数比较或对象。
【问题讨论】:
-
a和c是同一个对象。 JS 具有按值共享的语义。 -
注意,我第一次看到函数标识比较是在 Node.js 事件发射器库中,所以很常用
-
@elclanrs 是的,JS 知道某物是否指的是同一个确切的对象,但如何
-
换一种说法,作为 JS 的最终用户,我无法像其他语言那样获取对象的内存地址。例如,为了比较 Java 中的严格相等性,我们比较内存位置。
-
@AlexanderMills — 哦,我引用的是当前规范 ECMAScript 2017,而您引用了 ECMA-262 ed 5.1。我没有指向 EMCAScript 2018 的链接,我想它会在它发布时提供,也许是在 6 月?最新的草稿是ECMAScript 2019。
标签: javascript node.js