当他们的索引器基于get/set时,谷歌Chrome控制台没有正确显示类似数组的对象?

Rya*_*ley 11 javascript arrays google-chrome undefined google-chrome-devtools

我相信ECMA标准的一部分是,当对象是类似数组时,Javascript控制台会将对象显示为数组.

例如:["hello","world"]用于包含数字索引的字符串的对象.

类似数组的行为被定义为对象上存在的长度属性和拼接方法,以及数字索引属性.

我们中的许多人可能在过去使用过jQuery.

我一直试图利用这种行为并认为这是可取的.但是我有额外的要求,我的索引使用getter/setter来设置它们,以便我可以在修改时进行一些额外的处理.

但是,当我这样做时,上面的数组将呈现为:

[undefined×2]

但是,该对象的行为与简单示例完全相同.

看到这个小提琴有一个更好的解释:http://jsfiddle.net/5YgAv/

所以你看?两个非常相似的例子,但是getter的存在已经在控制台中破坏了它.

我一直在调试最新的Chromium源代码,看起来Chrome在控制台上推送了一条基本上包含getter函数的消息.但是,无法修改控制台源代码,以便它可以调用该函数并获取值.如果可行,那么我们可以修改开发人员工具以正确处理getter和setter.

我想知道的是,如果有人对这个有趣的小错误有任何见解,或者在我将其归档为Chrome团队的一个错误之前可能最好解决这个问题,这个问题很长时间被遗忘并埋藏在Google的深处.我其实很喜欢以这种或那种方式解决这个问题.

我也对一种优雅的解决方法持开放态度,允许我在修改类似数组的对象上的任何属性时进行一些特殊处理.

帮助我Obi-Stackoverflow-Kenobi,你是我唯一的希望!

[瑞安]

Jas*_* L. 2

虽然这并不能回答为什么 Chrome 不会像数组一样写出数组的问题,但有一种方法可以“欺骗”Chrome 这样做。对我们来说幸运的是,这非常简单。

  1. 覆盖对象的 toString 函数,返回数据变量
  2. 当您记录数组时,将其记录为 myArray.toString();

请参阅此 jsFiddle:http://jsfiddle.net/YXwxS/

与此同时,我将继续研究这个问题,因为这是一个有趣的问题:)