javascript中push和normal数组赋值之间的区别

时间:2011-07-19 07:23:02

标签: javascript jquery arrays api

我正在使用flot api绘制图表。请查看此图表类型HERE 在那个例子中,他们使用了像

这样的值
var sin = [], cos = [];
  for (var i = 0; i < 14; i += 0.5) {
        sin.push([i, Math.sin(i)]);
        cos.push([i, Math.cos(i)]);
  }

现在,当我替换了

时,图表被绘制为“弯曲”的线条
sin.push([i, Math.sin(i)]);
cos.push([i, Math.cos(i)]);

用,

sin[i]=[i, Math.sin(i)];
cos[i]=[i, Math.cos(i)];

然后使用直线绘制图表。我现在有两个问题。

1)两种阵列分配有什么区别?
2)这是因为数组赋值或API行为的不同吗?

任何帮助非常感谢!感谢。

编辑:将i设置为1并使用推送方法或默认分配设置不同的值,您将得到相同的结果。

4 个答案:

答案 0 :(得分:4)

我不是整数。您只能在数组索引中使用int。

1)两种类型的阵列分配有什么区别? A)没有,除了推送下一个int的索引。

2)这是因为数组赋值或API行为的不同吗? A)是的,数组无效,因为键的1.5值被解析为字符串,api无法按预期读取数组。

尝试使用apis方式或使用for语句的不同值。

答案 1 :(得分:3)

我认为i增量存在问题。很明显,每次迭代i增加0.5,而不是1.看看:

for (var i = 0; i < 14; i += 0.5) 

因此sin[i]=...将无法正常运作。但是sin.push(...)会有用。

答案 2 :(得分:2)

数组索引不能是分数,而且总是字符串,因此数字 1.5正在转换为字符串'1.5',序列将为'0','0.5','1 ','1.5'等等。但是使用 push ,所有索引都是整数字符串,因此将是0,1,2等。

毫无疑问,正在使用基于整数的循环来读取数组中的值,因此它会跳过.5个(即每隔一个元素)并给出锯齿状边缘。

答案 3 :(得分:1)

通常情况下这会有效,但在这种情况下,您将i增加0.5,这会导致i成为float - 值。

查看两种变体的输出:

// push
// cos
[[0, 1], 
 [0.5, 0.8775825618903728], 
 [1, 0.5403023058681398], 
 [1.5, 0.0707372016677029], 
 [2, -0.4161468365471424], 
 [2.5, -0.8011436155469337], ...]

// sin
[[0, 0], 
 [0.5, 0.479425538604203], 
 [1, 0.8414709848078965], 
 [1.5, 0.9974949866040544], 
 [2, 0.9092974268256817], 
 [2.5, 0.5984721441039564], ...]

// array-index
// cos
[[0, 1], 
 [1, 0.5403023058681398], 
 [2, -0.4161468365471424], 
 [3, -0.9899924966004454], 
 [4, -0.6536436208636119], ...]

// sin
[[0, 0], 
 [1, 0.8414709848078965], 
 [2, 0.9092974268256817], 
 [3, 0.1411200080598672], 
 [4, -0.7568024953079282], ...]