ES6 中函数参数的默认值

ES6 引入了函数参数的默认值(Default Parameters)功能,允许在函数定义时为某些参数提供默认值。当调用函数时,如果这些参数没有传递值(或传递的值为 undefined),则会使用默认值。

1. 基本语法

默认值语法非常简单,只需要在参数名后使用等号 = 来指定默认值:
 

function greet(name = 'Guest') {console.log(`Hello, ${name}!`);
}greet();         // 输出: Hello, Guest!
greet('Alice');  // 输出: Hello, Alice!

在上面的例子中,name 参数的默认值是 'Guest'。当调用 greet() 时,如果没有传递 name 参数,函数会使用默认值 'Guest'

2. 多个参数的默认值

你可以为多个函数参数设置默认值:
 

function createProfile(name = 'John Doe', age = 30) {console.log(`Name: ${name}, Age: ${age}`);
}createProfile();              // 输出: Name: John Doe, Age: 30
createProfile('Alice');       // 输出: Name: Alice, Age: 30
createProfile('Bob', 25);     // 输出: Name: Bob, Age: 25

如果只传递了一个参数,另一个参数会使用它的默认值。

3. 默认值与其他参数的结合

默认参数可以与其他普通参数结合使用,只要确保默认参数的位置在没有默认值的参数之后。例如:
 

function sum(a, b = 5, c = 10) {return a + b + c;
}console.log(sum(2));         // 输出: 17, 因为 b 默认是 5, c 默认是 10
console.log(sum(2, 3));      // 输出: 15, 因为 c 默认是 10
console.log(sum(2, 3, 4));   // 输出: 9

4. 动态计算默认值

默认值也可以是一个表达式,甚至可以是一个函数调用。这个表达式会在函数调用时求值并赋值给参数:
 

function getMax(a, b = Math.max(a, 100)) {console.log(`Max value: ${b}`);
}getMax(50);  // 输出: Max value: 100
getMax(200); // 输出: Max value: 200

在上面的例子中,如果 b 没有传递值,默认值 Math.max(a, 100) 会被计算出来。

5. 默认值与 undefined 的行为

需要注意的是,默认值只在参数为 undefined 时生效。如果传递了 null 或其他值,则不会使用默认值:
 

function greet(name = 'Guest') {console.log(`Hello, ${name}!`);
}greet(undefined); // 输出: Hello, Guest!
greet(null);      // 输出: Hello, null!

6. 与解构赋值的结合

当函数参数是一个对象或数组时,可以与解构赋值结合使用,为解构的属性设置默认值:
 

// 对象解构
function printUserInfo({ name = 'Guest', age = 18 } = {}) {console.log(`Name: ${name}, Age: ${age}`);
}printUserInfo();                        // 输出: Name: Guest, Age: 18
printUserInfo({ name: 'Alice' });        // 输出: Name: Alice, Age: 18
printUserInfo({ age: 25 });              // 输出: Name: Guest, Age: 25// 数组解构
function printCoordinates([x = 0, y = 0] = []) {console.log(`X: ${x}, Y: ${y}`);
}printCoordinates();             // 输出: X: 0, Y: 0
printCoordinates([10]);         // 输出: X: 10, Y: 0
printCoordinates([10, 20]);     // 输出: X: 10, Y: 20

总结

ES6 的函数参数默认值简化了代码,使得函数更加灵活和易用。它允许开发者为函数参数设置默认值,避免了在函数内部编写冗长的检查代码。同时,默认值的引入使得代码更加简洁、易懂,并且能够与其他特性(如解构赋值)结合使用,提升了编程效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/70618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP ABAP调用DeepSeek API大模型接口

搜索了一下DeepSeek,发现有人已经实现了SAP的对接, 不登录网页,SAP如何使用DeepSeek快速编程,ABAP起飞啦~ 按照对应的注册流程和方法。总算做出了第一个能够直连DeepSeek的API abap程序。 效果不错。 report ZTOOL_ABAP_CALL_D…

如何使用python制作一个天气预报系统

制作一个天气预报系统可以通过调用天气 API 来获取实时天气数据,并使用 Python 处理和展示这些数据。以下是一个完整的指南,包括代码实现和注意事项。 1. 选择天气 API 首先,需要选择一个提供天气数据的 API。常见的天气 API 有: OpenWeatherMap API:提供全球范围内的天…

verilog练习:i2c slave 模块设计

文章目录 前言1. 结构2.代码2.1 iic_slave.v2.2 sync.v2.3 wr_fsm.v2.3.1 状态机状态解释 2.4 ram.v 3. 波形展示4. 建议5. 资料总结 前言 首先就不啰嗦iic协议了,网上有不少资料都是叙述此协议的。 下面将是我本次设计的一些局部设计汇总,如果对读者有…

2025年度Python最新整理的免费股票数据API接口

在2025年这个充满变革与机遇的年份,随着金融市场的蓬勃发展,量化交易逐渐成为了投资者们追求高效、精准交易的重要手段。而在这个领域中,一个实时、准确、稳定的股票API无疑是每位交易者梦寐以求的工具。 现将200多个实测可用且免费的专业股票…

物品匹配问题-25寒假牛客C

登录—专业IT笔试面试备考平台_牛客网 这道题看似是在考察位运算,实则考察的是n个物品,每个物品有ai个,最多能够得到多少个物品的配对.观察题目可以得到,只有100,111,010,001(第一位是ci,第二位是ai,第三位是bi)需要进行操作,其它都是已经满足条件的对,可以假设对其中两个不同…

活动预告 |【Part 1】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…

MySQL 库建表数量有限制吗?

问:MySQL 库建表数量有限制吗? 答:无限制 官方文档: MySQL has no limit on the number of databases. The underlying file system may have a limit on the number of directories. MySQL has no limit on the number of tabl…

【电机控制器】STC8H1K芯片——低功耗

【电机控制器】STC8H1K芯片——低功耗 文章目录 [TOC](文章目录) 前言一、芯片手册说明二、IDLE模式三、PD模式四、PD模式唤醒五、实验验证1.接线2.视频(待填) 六、参考资料总结 前言 使用工具: 1.STC仿真器烧录器 提示:以下是本…

校园网规划方案

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚: https://blog.csdn.net/qq_52914969?typeblog 本课程设计参考学习计算机网络 思科Cisco Packet Tracer仿真实验_哔哩哔哩_bilibili, 文章和pkg详见个人博客站: http://www.kervin24.to…

【redis】数据类型之list

Redis的List数据类型是一个双向链表,支持在链表的头部(left)和尾部(right)进行元素的插入(push)和弹出(pop)操作。这使得List既可以用作栈(stack)…

用 DeepSeek + Kimi 自动做 PPT,效率起飞

以下是使用 DeepSeek Kimi 自动做 PPT 的详细操作步骤: 利用 DeepSeek 生成 PPT 内容: 访问 DeepSeek 官网,完成注册/登录后进入对话界面。输入指令,例如“请用 Markdown 格式生成一份关于[具体主题]的 PPT 大纲,需包…

机器学习怎么学习,还有算法基本的源代码

1.scikit-learn官方文档,中文版/英文版 中文社区:https://scikit-learn.org.cn/ 中文官方文档:https://scikitlearn.com.cn/ 英文版:https://scikit-learn.org/stable/(翻墙) 2.菜鸟教程:AI&a…

记录安装pdsh中 Linux 系统根目录空间不足导致的编译安装问题

解决 Linux 系统根目录空间不足导致的编译安装问题 问题描述 在 Ubuntu 系统上编译安装 pdsh-2.29 时,由于根目录空间不足,导致 configure 过程中出现以下错误: ./configure: line 1197: cannot create temp file for here-document: No s…

位图的深入解析:从数据结构到图像处理与C++实现

在学习优选算法课程的时候,博主学习位运算了解到位运算的这个概念,之前没有接触过,就查找了相关的资料,丰富一下自身,当作课外知识来了解一下。 位图(Bitmap)是一种用于表示图像的数据结构&…

【Matlab优化算法-第14期】基于智能优化算法的VMD信号去噪项目实践

基于智能优化算法的VMD信号去噪项目实践 一、前言 在信号处理领域,噪声去除是一个关键问题,尤其是在处理含有高斯白噪声的复杂信号时。变分模态分解(VMD)作为一种新兴的信号分解方法,因其能够自适应地分解信号而受到…

python连点器

要实现一个用于抖音点赞的鼠标连点工具,可以通过编程或现有软件实现。以下是两种常见方法(但请注意:频繁自动化操作可能违反平台规则,需谨慎使用): 方法 1:使用现成工具(如 AutoClic…

8.JVM-方法区

前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person&a…

C++:将函数参数定义为const T的意义

C++很多函数的参数都会定义为const T&,那么这么做的意义是什么呢? 避免拷贝:通过引用传递参数而不是值传递,可以避免对象的拷贝,从而提高性能,特别是当对象较大时。 保护数据:使用const关键字可以防止函数修改传入的参数,确保数据的安全性和一致性。 对于保护数据这…

大模型训练(7):集合通信与通信原语

0 背景 分布式训练过程中设计到许多通信上的操作, 每个操作有其不同的术语并且有所区别,这里将其用简单的例子和描述总结一下,方便理解。 集合通信(Collective Communications)是一个进程组的所有进程都参与的全局通…

全程Kali linux---CTFshow misc入门(38-50)

第三十八题: ctfshow{48b722b570c603ef58cc0b83bbf7680d} 第三十九题: 37换成1,36换成0,就得到长度为287的二进制字符串,因为不能被8整除所以,考虑每7位转换一个字符,得到flag。 ctfshow{5281…