使用Javascript数组,对象和RaphaelJS的奇怪行为

时间:2013-12-29 07:45:36

标签: javascript raphael graphael

我有一种定义一个带有数组的对象的情况。出于某种原因,在我尝试使用之前,Chrome会向该对象添加工件。

我的对象:

var colorPalettes = {
            single_A7DBD8: {
                amounts: [100],
                colors: ['#A7DBD8']
            }, 
            single_C02942: {
                amounts: [100],
                colors: ['#C02942']
            }
}

当我运行代码时,控制台会显示var colorPalettes的以下内容:

amounts: Array[1]
   0: Object  //<-- added by Chrome, 'value' should come directly in the array
     order: 0
     value: 100
     valueOf: function (){return this.value}
     __proto__: Object
     length: 1
     __proto__: Array[0]
colors: Array[1]
   0: "#A7DBD8"
     length: 1
    __proto__: Array[0]
    __proto__: Object

问题是:

  1. 为什么amounts在数组中有Object? - 我没有定义它。
  2. 如果是这样 - 为什么colors没有表现出相同的行为?
  3. 当我通过jsfiddle运行时,为什么我的代码中没有证明这种行为?
  4. 我尝试了什么:

    1. 我的代码colorPalettes设置为window.something.colorPalettes。我把它变成了一个局部变量 - 没有成功。
    2. 我尝试交换amountscolors的顺序(我知道,我绝望了......) - 所以行为也交换了,现在colors有额外的{{1} }}。
    3. 我将我的代码放入http://jsfiddle.net/2JfyX/4/但行为正常 - Object内没有额外的Object
    4. 编辑1:

      我还尝试在colorPalettes内放一个字符串,而不是当前的amounts

      编辑2:
      试图模拟在我的代码中添加jQuery点击事件,无法重现http://jsfiddle.net/2JfyX/19/

      编辑3:
      我相信我找到了罪魁祸首。这是g.Raphael。由于某种原因(还没有深入研究他们的代码),它会对我传递给它的对象进行更改

      你可以看到我直接将int传递给r.piechart,在第6个循环中它将我的数组更改为包含一个对象。不好:-O

      我将从现在开始克隆数组并希望最好......

      colorPalettes

      有什么想法吗?谢谢, d。

1 个答案:

答案 0 :(得分:0)

我刚在FireFox Firebug中运行此代码。我在对象上执行了console.log(),并显示了以下结果。

enter image description here

这几乎解释了整个情况。该对象内有两个嵌套对象 single_A7DBD8 single_C02942 这两个对象都包含两个数组。 “数量”和“颜色”。

正如你可以看到每个数组的+符号。它显示这些包含元素,我们可以扩展它们以查看数组的每个索引处的元素。

因此,如果要访问第一个对象中amount数组的第一个元素,请执行以下代码:

console.log(colorPalettes.single_A7DBD8.amounts[0]); 

记住colorPalettes包含两个对象