这两个结果为什么不一样?

yiqianke 2012-09-24 04:53:11
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。求指教
...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
张运领 2012-09-24
  • 打赏
  • 举报
回复
呵呵,是哦,一个的时候,会自己转换类型,元素多的话,就转换不了了~~真没有注意过~~
泡泡鱼_ 2012-09-24
  • 打赏
  • 举报
回复
汗~~上面的加注释加得有点乱了
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
泡泡鱼_ 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:

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

alert(typeof arg1) >>object
alert(arg1[0] == arg2[0]) >> true

这又怎么解释呢?
[/Quote]

//你使用的以下方式,返回的就是个数组,只不过当数组有且仅有一个元素时,那就不需要指定数组下标
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
张运领 2012-09-24
  • 打赏
  • 举报
回复
js是弱语言,不用严格“===”等式的话,是可以根据需求自己进行变换类型的~~
persuit666 2012-09-24
  • 打赏
  • 举报
回复
这是肯定的,
var arg1 = Array.prototype.slice.call(arguments,0);
//创建arguments的副本,slice()是创建副本,而不是原来的数组
当然不等于arguments
gf05011 2012-09-24
  • 打赏
  • 举报
回复
arguments是一个对象类型(Object),但是具有数组的特性。
yiqianke 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你把那两个显示换成alert,你会发现,你个是字符串,一个是对象~~所以这两个是类型不一样~~
[/Quote]
alert(typeof arg1) >>object
alert(arg1[0] == arg2[0]) >> true

这又怎么解释呢?
张运领 2012-09-24
  • 打赏
  • 举报
回复
你把那两个显示换成alert,你会发现,你个是字符串,一个是对象~~所以这两个是类型不一样~~

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧