function test(){
    var arg1 = Array.prototype.slice.call(arguments,0);
    var arg2 = arguments;
    console.log(arg1)
    console.log(arg2)
}
test('name')
在火狐浏览器里面打印出来的是["name"] 和 +["name"]
这两个的长度和类型多事一样啊。但是arg1 != arg2。求指教

解决方案 »

  1.   

    你把那两个显示换成alert,你会发现,你个是字符串,一个是对象~~所以这两个是类型不一样~~
      

  2.   

    alert(typeof arg1) >>object
    alert(arg1[0] == arg2[0]) >> true这又怎么解释呢?
      

  3.   

    arguments是一个对象类型(Object),但是具有数组的特性。
      

  4.   

    这是肯定的,
     var arg1 = Array.prototype.slice.call(arguments,0);
    //创建arguments的副本,slice()是创建副本,而不是原来的数组
    当然不等于arguments
      

  5.   


    //你使用的以下方式,返回的就是个数组,只不过当数组有且仅有一个元素时,那就不需要指定数组下标
    var a=["name"];
    alert(a[0]);//name
    alert(a);//name
    //下面两个输出就一样了。但如果:a=["name","nick"]就不一样了,不指定数组下标的话就会将这个数组以逗号做连接符全部输出
    arg1=Array.prototype.slice.call(arguments,0);
    //你使用以下方式,则返回的是个字符串
    arg1=String.prototype.slice.call(arguments,0);alert(typeof arg1);// >>string
      

  6.   

    汗~~上面的加注释加得有点乱了
    var a=["name"];
    alert(a[0]);//name
    alert(a);//name
    //因为数组a有且仅有一个元素时,那就不需要指定数组下标。上面两个输出是一样的。但如果:a=["name","nick"]就不一样了,不指定数组下标的话就会将这个数组以逗号做连接符全部输出
    //你使用的以下方式,返回的就是个数组
    arg1=Array.prototype.slice.call(arguments,0);
    //但如果你使用以下方式,则返回的是个字符串
    arg1=String.prototype.slice.call(arguments,0);alert(typeof arg1);// >>string