概要:在本教程中,您将学习如何在 ES6 中处理 JavaScript 默认参数。
TL;DR
function say(message='Hi') {
console.log(message);
}
say(); // 'Hi'
say('Hello') // 'Hello'
Code language: JavaScript (javascript)
say()
函数中 message
参数的默认值为 'Hi'
。
在 JavaScript 中,默认函数参数允许您在没有值或 undefined
传递到函数时,将命名参数初始化为默认值。
参数与实参
有时,您可以互换使用参数和实参这两个术语。但是,根据定义,参数是您在 函数声明 中指定的,而实参是您传递给函数的值。
考虑以下 add()
函数
function add(x, y) {
return x + y;
}
add(100,200);
Code language: JavaScript (javascript)
在此示例中,x
和 y
是 add()
函数的参数,传递给 add()
函数的值 100
和 200
是实参。
为函数设置 JavaScript 默认参数
在 JavaScript 中,参数的默认值为 undefined。这意味着如果您没有将实参传递到 函数 中,其参数将具有 undefined
的默认值。
请参见以下示例
function say(message) {
console.log(message);
}
say(); // undefined
Code language: JavaScript (javascript)
say()
函数接受 message
参数。因为我们没有将任何实参传递给 say()
函数,所以 message
参数的值为 undefined
。
假设您希望将 message
参数赋予默认值 10。
实现此目的的一种典型方法是使用 三元运算符 测试参数值,并在其为 undefined
时分配默认值
function say(message) {
message = typeof message !== 'undefined' ? message : 'Hi';
console.log(message);
}
say(); // 'Hi'
Code language: JavaScript (javascript)
在此示例中,我们没有将任何值传递到 say()
函数中。因此,message 实参的默认值为 undefined
。在函数内部,我们将 message
变量重新分配为 Hi
字符串。
ES6 提供了一种更简单的方法来设置函数参数的默认值,如下所示
function fn(param1=default1, param2=default2,..) {
}
Code language: JavaScript (javascript)
在上面的语法中,您使用 赋值运算符 (=
) 和参数名称后的默认值来为该参数设置默认值。例如
function say(message='Hi') {
console.log(message);
}
say(); // 'Hi'
say(undefined); // 'Hi'
say('Hello'); // 'Hello'
Code language: JavaScript (javascript)
工作原理。
- 在第一次函数调用中,我们没有将任何实参传递到
say()
函数中,因此message
参数采用了默认值'Hi'
。 - 在第二次函数调用中,我们将
undefined
传递到了say()
函数中,因此message
参数也采用了默认值'Hi'
。 - 在第三次函数调用中,我们将
'Hello'
字符串传递到say()
函数中,因此message
参数采用了字符串'Hello'
作为默认值。
更多 JavaScript 默认参数示例
让我们看几个更详细的示例,以了解设置函数参数默认值的一些可用选项。
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.body.appendChild(div);
return div;
}
Code language: JavaScript (javascript)
以下示例没有将任何实参传递到函数中,因此 createDiv()
函数使用参数的默认值。
createDiv();
假设您希望使用高度和宽度参数的默认值以及特定的边框样式。在这种情况下,您需要将 undefined
值传递给前两个参数,如下所示
createDiv(undefined,undefined,'solid 5px blue');
Code language: JavaScript (javascript)
2) 评估默认参数
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']
Code language: JavaScript (javascript)
参数可以取一个默认值,该值是函数的返回值。
考虑以下示例
function date(d = today()) {
console.log(d);
}
function today() {
return (new Date()).toLocaleDateString("en-US");
}
date();
Code language: JavaScript (javascript)
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
Code language: JavaScript (javascript)
3) 在默认值中使用其他参数
您可以将参数分配一个默认值,该值引用其他默认参数,如以下示例所示
function add(x = 1, y = x, z = x + y) {
return x + y + z;
}
console.log(add()); // 4
Code language: JavaScript (javascript)
在 add()
函数中
y
的默认值设置为x
参数。z
的默认值是x
和y
的总和add()
函数返回x
、y
和z
的总和。
参数列表似乎具有自己的 作用域。如果您引用尚未初始化的参数,您将收到错误。例如
function subtract( x = y, y = 1 ) {
return x - y;
}
subtract(10);
Code language: JavaScript (javascript)
错误消息
Uncaught ReferenceError: Cannot access 'y' before initialization
Code language: JavaScript (javascript)
使用函数
您可以使用函数的返回值作为参数的默认值。例如
let taxRate = () => 0.1;
let getPrice = function( price, tax = price * taxRate() ) {
return price + tax;
}
let fullPrice = getPrice(100);
console.log(fullPrice); // 110
Code language: JavaScript (javascript)
在 getPrice()
函数中,我们调用了 taxRate()
函数以获取税率,并使用此税率从价格中计算税额。
arguments 对象
函数内部 arguments
对象的值是您传递给函数的实际实参的个数。例如
function add(x, y = 1, z = 2) {
console.log( arguments.length );
return x + y + z;
}
add(10); // 1
add(10, 20); // 2
add(10, 20, 30); // 3
Code language: JavaScript (javascript)
现在,您应该了解 JavaScript 默认函数参数以及如何有效地使用它们。