JavaScript函数参数缺省值

JavaScript函数参数缺省值

本文介绍Es6中如何处理函数的缺省参数。

1. 实参与形参(Argument vs. Parameter)

通常我们不区分实参与形参(Argument vs. Parameter),形参(Parameter)是函数定义时声明的参数,而实参(Argument)是调用函数时传入的参数。

请看下面add()函数:

function add(x,y) {
   return x + y;
}
 
add(100,200);

x,y是形参,100,200是实参。

2. 函数形式参数缺省值

JavaScript中,形式参数默认缺省值为undefined,即如果不传入实参给函数,则取缺省值为undefined。请看示例:

function foo(bar) {
    console.log(bar);
}
 
foo(); // undefined

foo()函数带bar形式参数。因调用时没有传入任何实际参数,故bar的实际值为undefined
假设给bar参数设置缺省值为10,为了测试缺省值可以传入undefined

function foo(bar) {
    bar = typeof bar !== 'undefined' ? bar : 10;
    console.log(bar);
}
foo(); // 10

上面示例没有给bar任何值,因此值为undefined。然而在函数内部检测如果值为undefined则赋值为10,因此输出10.

ES6提供更简单方法设置参数缺省值,语法如下:

function function_name(param1=value1,param2=value2,..) {
}

我们看到,使用=给参数设置缺省值。请看示例:

function foo(bar = 10) {
    console.log(bar);
}
 
foo(); // 10
foo(undefined); // 10
foo(20); //20

说明如下:

  1. 第一次函数调用,给函数 foo()的参数任何值 , 因此bar的缺省值为 10.
  2. 第二次调用, 给 foo() 函数传入undefined, 因此bar的缺省值仍为 10.
  3. 第三次调用, 给函数 foo()的参数值设置为20 , 因此bar的缺省值为 20.

3. 示例说明参数缺省值

本节通过几个示例看看设置缺省值的不同方式。

  1. 传入 undefined

下面 createDiv() 函数在文档中创建div元素,参数都带默认值:

function createDiv(height = '100px', width = '100px', border = 'solid 1px red') {
    let div = document.createElement('div');
    div.style.height = height;
    div.style.width = width;
    div.style.border = border;
    document.getElementsByTagName('body')[0].appendChild(div);
    return div;
}

下面调用使用缺省参数:

createDiv();

如果想使用height和width的缺省参数,仅传入border参数。这时你需要传入undefined值给height和width:

createDiv(undefined,undefined,'solid 5px blue');
  1. 评估缺省值

JavaScript引擎在函数调用时评估缺省值,请看示例:

function put(toy, toyBox = []) {
    toyBox.push(toy);
    return toyBox;
}
 
console.log(put('Toy Car'));
// -> ['Toy Car']
console.log(put('Teddy Bear'));
// -> ['Teddy Bear'], not ['Toy Car','Teddy Bear']

该函数参数带缺省值,即函数返回结果值。

再看另一个示例:

function date(d = today()) {
    console.log(d);
}
 
function today() {
    return (new Date()).toLocaleDateString("en-US");
}
 
date();

date() 函数带一个参数,其缺省值是today()函数的返回值。today()函数返回今天日期的字符串表示。
当声明date()函数时,today()函数还没有执行评估直到我们调用date()函数。

我们可以使用这个特性使得参数为必传参数。如果没有传入参数则抛错误:

function requiredArg() {
   throw new Error('The argument is required');
}
function add(x = requiredArg(), y = requiredArg()){
   return x + y;
}
 
add(10); // error
add(10,20); // OK
  1. 缺省值中使用其他形式参数

参数缺省值可以引用其他缺省参数:

function bar(x = 1, y = x, z = x + y) {
    return x + y + z;
}
 
console.log(bar()); // 4

bar函数解释:

  • y缺省值为x参数.
  • z缺省值为x和y参数之和.
  • bar() 函数返回 x, y, 和 z之和.

参数列表有其自己范围。如果引用参数没有初始化会报错:

function bar( x = y, y = 1 ) {
    return x - y;
}
 
bar(10);

错误信息:

Uncaught ReferenceError: Cannot access 'y' before initialization
  1. 使用函数作为缺省值

我们可以使用函数返回值作为参数缺省值:

let taxRate = () => 0.1;
let getPrice = function( price, tax = price * taxRate() ) {
    return price + tax;
}
 
let fullPrice = getPrice(100);
console.log(fullPrice); // 110

在getPrice()函数中通过调用 taxRate() 函数获得税率作为tax参数值并计算价格。

  1. 实参(arguments)对象

arguments对象值在函数内部是实际传入参数的数量:

function foo(x, y = 1, z = 2) {
    console.log( arguments.length );
    return x + y + z;
}
 
foo(10); // 1
foo(10, 20); // 2
foo(10, 20, 30); // 3

4. 总结

本文首先介绍形参与实参,然后介绍Es6函数缺省值用法并通过几个示例说明缺省值的深入用法。希望这些知识能让你开发更加灵活的函数。

<think>嗯,用户问的是数组元素的缺省值,也就是默认值。我需要先回忆一下不同编程语言中数组的默认值是什么样的。比如Java、C++、Python这些常见的语言可能有不同的处理方式。 首先,Java里的数组是对象,声明数组后,如果没有显式初始化,基本类型会有默认值,比如int是0,boolean是false,对象数组则是null。这点我记得没错吧?可能需要确认一下。 然后是C++,这里的情况可能更复杂。如果数组在全局或静态存储区,默认值会是0;但如果是局部变量,不初始化的话,值是不确定的,可能包含垃圾值。这一点要分清楚,用户可能会混淆。 接下来是Python,列表(List)在创建时如果不指定元素,默认是空的。不过用户可能想知道如何生成有默认值的数组,比如用列表推导式或者使用array模块。numpy的话,创建数组时可以指定初始值,比如zeros或者ones函数JavaScript的情况呢,数组元素如果没有显式赋值,默认是undefined。不过用new Array(length)创建的数组,元素是空位,访问时会返回undefined,但可能和显式赋值为undefined有所不同。 还要注意不同数据类型的默认值,比如数值类型、布尔型、引用类型等。此外,动态语言和静态语言处理方式不同,静态语言通常有更明确的默认值,而动态语言可能更灵活或者需要显式初始化。 用户可能需要这些信息来进行编程,避免因为未初始化导致的错误,比如NullPointerException或者使用未定义的值。所以解释清楚不同语言的区别,以及为什么会有这样的设计,可能对用户有帮助。 另外,是否需要提到其他语言,比如C#或者Go?可能根据用户的问题范围来决定。如果用户没有指定语言,应该涵盖常见的主流语言,并指出不同语言的区别。 总结来说,回答的结构应该是先总述不同语言的处理方式,然后分点详细说明每个语言的情况,最后总结注意事项和应用场景。确保用词准确,避免误导,比如C++局部数组未初始化的值是不确定的,不能假设为0。</think>数组元素的缺值值(默认值)与编程语言及其数据类型密切相关。以下是常见语言中数组元素缺省值的详细说明: --- ### 一、Java 中的数组缺省值 - **基本类型数组**: - `int[]`: 默认值为 `0` - `boolean[]`: 默认值为 `false` - `char[]`: 默认值为 `\u0000`(空字符) - `double[]`: 默认值为 `0.0` ```java int[] arr = new int[3]; // 值为 [0, 0, 0] ``` - **引用类型数组**: - 默认值为 `null` ```java String[] arr = new String[2]; // 值为 [null, null] ``` --- ### 二、C/C++ 中的数组缺省值 - **全局/静态数组**: - 未显式初始化时,默认值为 `0`(数值类型)或 `\0`(字符类型)。 ```cpp int globalArr[3]; // 默认值为 [0, 0, 0] ``` - **局部数组**: - 未初始化时值为**随机垃圾值**(取决于内存残留数据)。 ```cpp void func() { int localArr[3]; // 值不确定,可能是任意整数 } ``` --- ### 三、Python 中的列表缺省值 - Python 列表(`list`)本身无默认值,但可通过以下方式初始化: - **空列表**:`arr = []` - **固定默认值**:使用列表推导式或乘法 ```python arr = [0] * 5 # 值为 [0, 0, 0, 0, 0] ``` - **NumPy 数组**: - 需显式指定初始值,例如: ```python import numpy as np arr = np.zeros(3) # 值为 [0.0, 0.0, 0.0] ``` --- ### 四、JavaScript 中的数组缺省值 - **未显式赋值的元素**: - 默认值为 `undefined`(稀疏数组)。 ```javascript let arr = new Array(3); // 值为 [empty &times; 3],访问时返回 undefined ``` - **显式初始化**: ```javascript let arr = [1, , 3]; // 值为 [1, undefined, 3] ``` --- ### 五、总结与注意事项 1. **静态类型语言**(如 Java、C++): - 基本类型有明确缺省值,引用类型为 `null`。 - **注意**:C/C++ 局部数组未初始化时值不可预测。 2. **动态类型语言**(如 Python、JavaScript): - 通常需要显式初始化,或依赖库函数生成默认值。 3. **内存安全**: - 始终建议显式初始化数组,避免未定义行为或潜在错误。 --- 通过理解不同语言的特性,可以更安全地操作数组元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值