一个关于JS数组的问题

var arr = new Array(5)
arr[0] = "Jani"
arr[1] = "Hege"
arr[2] = "Stale"
arr[3] = "Kai Jim"
arr[4] = "Borge"

document.write(arr + "
")
arr.splice(2,2)
document.write(arr + "
")
这段代码的输出结果是:
Jani,Hege,Stale,Kai Jim,Borge
Jani,Hege,Borge

同样是数组的splice()方法,下面这段代码结果却不一样
var Num_1=[];
var Num_2=[];
var num;

for(var i=1;i<50;i++){
    Num_1.push(i<10?"0"+i:i);
}
for(var i=0;i<5;i++){
    num=Num_1.splice(Math.floor(Math.random()*Num_1.length),1);
    Num_2.push(num);
}
document.write("随机产生的号码:"+Num_2.sort());

splice(x,y)方法是从索引的x开始删除y个元素
但是num=Num_1.splice(Math.floor(Math.random()*Num_1.length),1);
这个应该是删除一个元素 还有49个元素
可是问什么num就是一个数

求解为什么
还有sort()方法是数组排序,我声明一个数组添加5个数据型元素,然后用sort()方法却不能排序,需要设置个参数

var arr = new Array(6) arr[0] = "10" arr[1] = "5" arr[2] = "40" arr[3] = "25" arr[4] = "1000" arr[5] = "1" document.write(arr + "<br />") document.write(arr.sort())

这个结果是
10,5,40,25,1000,1
1,10,1000,25,40,5
没有排序

function sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = "10" arr[1] = "5" arr[2] = "40" arr[3] = "25" arr[4] = "1000" arr[5] = "1" document.write(arr + "<br />") document.write(arr.sort(sortNumber))

需要在设置个方法才能排序

而最上面个的那段程序直接用sort()就能排序,没有参数,为什么 求解?

  1. splice是直接操作原数组的,并且返回的不是原数组,而是移除的元素组成的数组。所以你splice(n, 1)返回的当然是只有一个元素的数组。
    // [0,1,2].splice(1,1) : [1]

  2. sort是可以不用传递比较函数的,它会直接使用默认的比较。你的第二段代码中排序是成功的,1,10,1000,25,40,5,你没发现它们起始数字是递增的吗?因为你push进去的是字符串,它是以字符串比较来排序的("b">"a", "b"<"ba")。同理,第一段代码你觉得是按数字排序,实际还是按字符串排序的,不信你去掉1位数的"0"前缀