JavaScript 参数 arguments深入了解以及javascript内置数据类型的讨论

一、JavaScript函数特性简介

在JavaScript的函数中,参数会保存在一个arguments对象中,实际上javascript不支持函数重名,后面的函数声明会覆盖前面的。因为javascript的函数参数个数是完全不指定的,而且函数作为一级公民,必须是一个名称对应一个函数。


二、JavaScript的特殊对象arguments

>function test(){return arguments}
undefined
>test(1)
[1]
>test(1,2)
[1, 2]
>typeof test()
"object"
>test('a','b',12)
["a", "b", 12]

v = test(1,3,4)
[1, 3, 4]
Object.prototype.toString.call(v)
"[object Arguments]"


chrome浏览器返回值给人一种错觉,好像arguments是个数组,但是其实他的类型就是"Arguments",它是一种拥有length属性的特殊对象;

nodejs里的返回就不一样


> function test(){return arguments}
undefined
> test(1)
{ '0': 1 }
> test(1,2,3)
{ '0': 1,
  '1': 2,
  '2': 3 }
>


三、JavaScript中的值与引用

事实上,Arguments保存的不是值,而是引用;

下面给出一个例子:

function test(a,b,c){ a = 10; b = 10; c = 10; console.log(arguments);}
undefined
test(1,2,3)
[10, 10, 10] VM4229:2
undefined
从这个例子可以看出来:arguments并不是参数的拷贝,而是一个参数的引用,这和javascript内置的数组有很大的区别,再给出一个例子:

var a = 1, b = 1, c = 1;
undefined
var list = [a, b, c]
undefined
list
[1, 1, 1]
a = 10; b = 10; c = 10;
10
list
[1, 1, 1]
在这里数组list里面的实际上是a,b,c的值而不是引用。

var a = 'hello';
undefined
list = [a]
["hello"]
a = 'world'
"world"
list
["hello"]

说起值和引用,大家可能会想起java,java里只有基本类型(bool, char, byte, short, int, long, float, double等)是值,其他的都是引用,但是在javascript里面不是这样的,javascript里面宽泛地将有如下数据结构:

number;

string;

object;

boolean;

undefined;

【注意】null的类型是object,NaN是数字;






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值