array.concat函数执行后,会覆盖最后一个元素;
比如:
var a=new Array();
a[0]=1;
a[1]=2;
a.concat([3,4]);
结果 a 应该为:[1,2,3,4], 但实际运行的结果是:[1,3,4];
源数组的最后一个元素被覆盖了。
经检查,发现错误出现在 IMP_JavaScript.pas 的_Array_concat函数。
修改如下:
procedure _Array_concat(M: TPAXMethodBody);
var
Source, Dest: TPAXJavaScriptArrayObject;
I, J, K, L: Integer;
V: Variant;
PaxArray: TPaxArray;
begin
with M do
begin
Source := TPAXJavaScriptArrayObject(Self);
L := Source.Length;
Dest := TPAXJavaScriptArrayObject.Create(Source.ClassRec);
Dest.Length := L;
for I:=0 to L - 1 do
Dest[I] := Source[I];
procedure _Array_concat(M: TPAXMethodBody);
var
Source, Dest: TPAXJavaScriptArrayObject;
I, J, K, L: Integer;
V: Variant;
PaxArray: TPaxArray;
begin
with M do
begin
Source := TPAXJavaScriptArrayObject(Self);
L := Source.Length;
Dest := TPAXJavaScriptArrayObject.Create(Source.ClassRec);
Dest.Length := L;
for I:=0 to L - 1 do
Dest[I] := Source[I];
//ked mod 2009年10月22日 -1会覆盖source的最后一个元素
//K := Dest.Length - 1;
K := Dest.Length ;
//end ked mod 2009年10月22日
//K := Dest.Length - 1;
K := Dest.Length ;
//end ked mod 2009年10月22日
...