美文网首页
[JavaScript] array中的empty是什么

[JavaScript] array中的empty是什么

作者: jiansheng | 来源:发表于2019-03-07 14:33 被阅读0次

记录一个问题,如下:

先声明一个长度为3的数组。
arr[0]打印出来都是undefined,使用undefined比较也返回true。但是使用indexOf查找的时候发现,返回-1。???
后来把arr[0]赋值为undefined,使用indexOf查找,返回0,正常了。

然后尝试从v8引擎中寻找答案。

下图为v8中的Array。
https://v8docs.nodesource.com/node-0.12/d4/da0/v8_8h_source.html#l02403

v8 Array

从注释中可以看到有提到 return an empty handle,然后去查看 CloneElementAt 方法的文档。
https://v8docs.nodesource.com/node-0.12/d3/d32/classv8_1_1_array.html#a5ffd29aeceba223ea75363e6ed2ebd67

CloneElementAt

文档中提到,如果clone失败,就返回 an empty handle
于是接着去寻找 handle
https://v8docs.nodesource.com/node-0.8/d4/da0/v8_8h_source.html#l00178
下图为 Handle 类,描述是一个由v8垃圾收集器管理的对象引用。

handle

结论:an empty handle 是一个空的由v8垃圾收集器管理的对象引用,不是 undefined,所以arr.indexOf(undefined)返回-1。

v8 Array.prototype.indexOf实现
https://github.com/v8/v8/blob/master/src/runtime/runtime-array.cc#L827

v8 Array.prototype.includes实现
https://github.com/v8/v8/blob/master/src/runtime/runtime-array.cc#L725

相关文章

网友评论

      本文标题:[JavaScript] array中的empty是什么

      本文链接:https://www.haomeiwen.com/subject/ztucpqtx.html