JavaScript 默认函数参数
本文介绍了 JavaScript 默认函数参数,允许使用默认值初始化命名参数(如果未传递实际参数或传递 undefined
)。我们将学习命名参数和实际参数之间的区别以及它们的使用。
实际参数是调用者传递给函数的实际值。命名参数使用实际参数的名称。这些名称与函数定义中的形式参数相关联。
实际参数在函数体内标记。命名参数的顺序无关紧要,只要它们被正确标记即可。
JavaScript 默认函数参数
在下面的代码中,如果在调用 sum()
函数时没有传递任何值(或传递了 undefined
),num2
的值将是二 (2)。
function sum(num1, num2 = 2) {
return num1 + num2;
}
console.log(sum(10, 3)); // expected output: 13
console.log(sum(3)); // expected output: 5
console.log(sum(3, undefined)); // expected output: 5
现在,如果我们不使用 JavaScript 默认函数参数会怎样。请参见下面给出的示例。
function sum(num1, num2) {
return num1 + num2;
}
console.log(sum(10, 3)); // expected output: 13
console.log(sum(3)); // expected output: NaN
console.log(sum(3, undefined)); // expected output: NaN
我们可以使用以下技术来避免 NaN
(非数字)。typeof
检查 num2
的值或类型是否为 undefined
,然后 num2
的值将是 1
。typeof
允许你传递任何内容,包括 null
和 false
。
function sum(num1, num2) {
num2 = (typeof num2 !== 'undefined') ? num2 : 1
return num1 + num2;
}
console.log(sum(5, 2)); // expected output: 7
console.log(sum(5)); // expected output: 6
使用 ES2015,不需要在函数体中告诉默认参数。现在,我们可以在函数定义中分配默认值。检查以下示例代码。
function sum(num1, num2 = 1) {
return num1 + num2;
}
console.log(sum(5, 2)); // expected output: 7
console.log(sum(5)); // expected output: 6
console.log(sum(5, undefined)); // expected output: 6
我们也可以调用另一个函数作为默认值。看看下面的例子。
function multiply(num1 = 2, num2 = 3) {
return num1 * num2;
}
function sum(num1, num2 = multiply()) {
return num1 + num2;
}
console.log(sum(5, 2)); // expected output: 7
console.log(sum(5)); // expected output: 11
console.log(sum(5, undefined)); // expected output: 11
让我们通过使用字符串类型的数据来练习。
function greetings(
name, greeting, message = greeting + ' ' + name + ', How are you?') {
return message;
}
console.log(greetings('Mehvish', 'Hello'));
// expected output: "Hello Mehvish, How are you?"
console.log(greetings('Mehvish', 'Hello', 'What\'s up'));
// expected output: "What's up"
我们已经使用数字、字符串和函数研究了默认函数参数。让我们了解如何使用解构赋值设置默认值。但在此之前,先看看解构赋值到底是什么?
const person = {
firstname: 'Mehvish',
lastname: 'Ashiq',
age: 30,
email: 'delfstack@example.com'
};
const {firstname, lastname, age, email} = person
console.log(firstname);
console.log(lastname);
console.log(email);
输出:
"Mehvish"
"Ashiq"
"delfstack@example.com"
你可能已经注意到,我们直接在 console.log
中使用对象的属性,而不是 objectname.propertyname
。如果你评论 const {firstname,lastname,age,email} = person
行,你必须对所有 console.log
语句使用 person.firstname
、person.lastname
、person.email
。
那么,下面这行代码在做什么呢?这是一个解构赋值,意味着解包对象。现在,我们在 person
对象中拥有最少的属性。
试想一下,我们在一个对象中有数百个属性,并且每次都使用 objectname.propertyname
。它会看起来很乱。在这里,解包对象很有用。
这样,我们就摆脱了 objectname.
部分并仅使用 propertyname
。
const {firstname, lastname, age, email} = person;
让我们将这个解构赋值用于 JavaScript 默认函数参数。
function displayPerson(lastname, firstname, email = 'mehvish.ashiq@gmail.com') {
if (typeof email !== 'undefined') {
console.log('not using default value of email');
console.log(firstname, lastname, email);
} else {
console.log('using default value of email');
console.log(firstname, lastname, email);
}
}
const person = {
firstname: 'Mehvish',
lastname: 'Ashiq',
age: 30,
email: 'delfstack@example.com'
};
const {firstname, lastname, age, email} =
person // destructure assignment (unpack the object)
displayPerson(age, firstname, email);
displayPerson(
age,
firstname); // default value of email will be used in this function call
输出:
"not using default value of email"
"Mehvish", 30, "delfstack@example.com"
"not using default value of email"
"Mehvish", 30, "mehvish.ashiq@gmail.com"
在这个例子中,如果调用者没有传递默认值 email
将被使用。
相关文章
Do you understand JavaScript closures?
发布时间:2025/02/21 浏览次数:108 分类:JavaScript
-
The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.
Do you know about the hidden traps in variables in JavaScript?
发布时间:2025/02/21 浏览次数:178 分类:JavaScript
-
Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av
How much do you know about the Prototype Chain?
发布时间:2025/02/21 浏览次数:150 分类:JavaScript
-
The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start
用 jQuery 检查复选框是否被选中
发布时间:2024/03/24 浏览次数:102 分类:JavaScript
-
在本教程中学习 jQuery 检查复选框是否被选中的所有很酷的方法。我们展示了使用直接 DOM 操作、提取 JavaScript 属性的 jQuery 方法以及使用 jQuery 选择器的不同方法。你还将找到许多有用的
jQuery 中的 Window.onload 与 $(document).ready
发布时间:2024/03/24 浏览次数:180 分类:JavaScript
-
本教程演示了如何在 jQuery 中使用 Window.onload 和 $(document).ready 事件。