arguments对象

灰太狼 2022-08-20 06:07 303阅读 0赞

函数中,有一个默认的对象,不需要你去声明,也不需要你去赋值,它叫做arguments,它是一个数组,保存着参数列表。先来看一个例子:

[javascript] view plain copy

  1. function add(num1, num2) {
  2. console.log(arguments); // [1, 2]
  3. return num1 + num2;
  4. };
  5. var b = add(1, 2);

注意,arguments对象保存的是实参。接下来,我们要展示JavaScript中非常有意思的一个东西,也是JavaScript灵活性的一大体现。在这之前,我们先来谈下C中的函数重载。

维基中的定义为:函数重载(Function overloading),是Ada、C++、C#、D和Java等编程语言中具有的一项特性,这项特性允许创建数项名称相同但功能的输入输出类型不同的子程序,它可以简单地称为一个单独功能可以执行多项任务的能力。

在函数重载中,输出类型可相同可不同,但参数列表一定要不一样,可以是数量不一样或者类型不一样,或者两者都不一样。

但在JavaScript这类弱类型语言中,类型无法预定义,即输入和输出类型无法从函数定义看出来。那么只剩一项了,参数列表的长度,即参数数量。但这真的有影响吗?

实际上,JavaScript没有函数重载,实参比形参长的后果仅仅是没有给实参一个别名而已。不懂?我们来看下例子:

[javascript] view plain copy

  1. function add(num1, num2) {
  2. console.log(arguments); // [1, 2, 3]
  3. return num1 + num2 + arguments[2];
  4. };
  5. var b = add(1, 2, 3); // 6

我们可以巧妙的利用arguments对象,来达到我们的目的。我们甚至可以对上面的做个扩展,让它能把所有参数的和返回,即使形参列表为空。

[javascript] view plain copy

  1. function add() {
  2. var sum = 0;
  3. for(var count = 0, length = arguments.length; count < length; count++) {
  4. sum += arguments[count];
  5. }
  6. return sum;
  7. };
  8. var b = add(1, 2, 3, 4); // 10

那如果相反,形参列表长度比实参列表长呢?

[javascript] view plain copy

  1. function add(num1, num2) {
  2. console.log(num1); // 1
  3. console.log(num2); // undefined
  4. return num1 + num2;
  5. };
  6. var b = add(1); // NaN

我们可以看到,超出实参长度的形参部分,就会是undefined,从而返回我们并不想要的结果(NaN表示应该是个number类型结果却是其他类型)。我们可以稍作修改:

[javascript] view plain copy

  1. function add(num1, num2) {
  2. num2 = num2 || 0;
  3. return num1 + num2;
  4. };
  5. var b = add(1); // 1

利用逻辑操作符的特性来将形参实例化,保证使用时形参不为undefined。当然,这样也有个别问题,如果传入的实参逻辑值也是false(例如0、undefined、null)等等,我们就需要用全等符号进行判断了,在此例中不做要求。

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS arguments对象

    众所周知,js是一门相当灵活的语言。当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的东西里

    相关 Arguments 对象

    `arguments` 是一个对应于传递给函数的参数的类数组对象。 `arguments`对象是所有(非箭头)函数中都可用的局部变量。你可以使用`arguments`对象在函

    相关 arguments参数对象

    1、一个函数的所有参数的集合,它是一个类数组,它拥有数组的下标和.length特性。 2、可以在函数内部使用arguments接收所传递过来的参数,是一个集合。可以把所有的实

    相关 arguments对象

    函数中,有一个默认的对象,不需要你去声明,也不需要你去赋值,它叫做arguments,它是一个数组,保存着参数列表。先来看一个例子: \[javascript\]  [vie

    相关 arguments 对象

    arguments 对象 在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。 例如,在函数 sayHi() 中,第一个参数是 mess

    相关 函数的arguments对象

    一 介绍 在JavaScript函数代码中,可以使用arguments特殊对象。当需要在函数中调用参数时,无需指出参数名称即可调用这些参数。 例如可以使用arguments

    相关 arguments 对象

    arguments 对象 在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。 例如,在函数 sayHi() 中,第一个参数