三、解构赋值、函数默认值、数组解构、对象解构

news2024/11/25 2:37:38

三、解构赋值、函数默认值、数组解构、对象解构

函数传参为undefined/不传值,解构赋值时值为undefined/不传值时,都可以去取自己定义的默认值。

一、函数默认值

1.1 函数默认值

ES5语法函数参数赋默认值

function foo(a, b){
    var a = typeof(arguments[0]) !== 'undefined' ? arguments[0]
    											 : 1;
    ...
}

ES6语法函数参数赋默认值,相当于let声明了一个变量,在声明之前会出现暂时性死区。

function foo(x = 1, y =2){
    ...
}

默认值的形式:

  • 表达式

举个函数参数为表达式的例子:

let a = 99;
function foo(b = a + 1){
    console.log(b);
}
foo(); // 100
a = 100;
foo(); // 101

当函数参数为表达式时,会有惰性求值现象:每次调用函数时,都会重新计算表达式。

1.2 参数作用域

关于作用域:

参数有自己单独的作用域:并没有访问函数内部的作用域;相当于是一个父子作用域嵌套的关系,父:参数作用域。

let y = 1;
function test1(x = y){
    let y = 3;
    console.log(x, y);
}
test1(); // 1 3

但在函数内部重复用let 定义的同名变量会报错:重复声明

function foo(x = 1){
    let x = 2;
    console.log(x);
}
// Uncaught SyntaxError: Identifier 'x' has already been declared
foo();

布尔值转换时,被认定为假的值叫虚值——>falsy。判断时六大虚值:

false 0 undefined null 空字符串 NaN

二、解构赋值

2.1解构赋值,es6对象拓展

解构赋值语法是一种 Javascript 表达式。

功能:通过解构赋值,可以将属性/值从对象/数组中取出,赋值给其他变量。

工作原理:模式匹配/结构化赋值,赋值时变量和值结构完全相同。

let [a,b,c] = [1,2,3];
console.log(a,b,c); //1 2 3

解构赋值情况:

  • 解构成功,取到了值。
  • 解构失败,变量多了,值少了,以undefined填充。
  • 不完全解构:值多了。

解构默认值分类:

  • 函数/函数执行

2.2 数组解构

解构赋值,没有值,才取默认值

let [x = 1, y = x] = [2];
console.log(x, y); // 2 2

2.3 ES6对象拓展

三种定义对象的方式:

let obj = {}; //字面量形式
let obj1 = new Object(); //构造函数
let obj2 = Object.create(原型); //Object.creat形式

ES6对象拓展:

  • 当属性名和变量名一致时,可以简写为一个
  • 方法名后之间可以加()
  • 属性拼接
var name = 'white';
var age = 23;
var person = {
    name,
    age,
    eat(){
        console.log(this.name);
    }
}
person.eat()
console.log(person);

let firstName = 'ai';
let secondName = 'xiaoye1';
let name = 'white'
let person = {
    [firstName + secondName]: name
}
console.log(person); //{aixiaoye1: 'white'}

在这里插入图片描述

2.4 对象解构

通过解构赋值,可以将属性从对象中取出,赋值给其他 变量

let {a: a, b: b, c: c} = {a : 1, b : 2, c : 3};
// 对象属性简写:属性名与变量名一致
let {x, y, z} = {x : 4, y : 5, z :6};
console.log(a,b,c); // 1 2 3
console.log(x,y,z); // 4 5 6

对象和数组解构都存在解构失败和解构不完全的情况,有值取值,没有取默认值,默认值也没有取undefined

对象解构不存在顺序,模式匹配对象中的属性。

let {x = 1, y, z, p} = {y : 5, x : 4, z :6};
console.log(x,y,z,p); //4 5 6 undefined

解构举例:

  1. 通过对象解构拿到JSON字符串中的具体值,这里的JSON字符串是少量的

在这里插入图片描述

  1. 利用对象解构拿到对象嵌套中的某个属性:例如孙子的属性
var person = {
    name: 'zhangsan',
    age: 50,
    son: {
        name: 'zhanghui',
        son: {
            name: 'zhangwei'
        }
    }
}
let {son:{son:mySonSon}} = person;
console.log(mySonSon); 
let {son:{son}} = person;
console.log(son); 

在这里插入图片描述

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

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

相关文章

11.Linux文件管理命令---diff比较两个文件

11.Linux文件管理命令—diff比较两个文件 文章目录diff比较两个文件练习案例diff比较两个文件 作用:找出两个文件的不同点。 用法:diff [选项] 源文件 目标文件 主要选项如下。 下面是 GNU 所接受的 diff 所有选项的概要。大多数选项有两个相同的名字&…

单机模拟集群(三主两从)

引言 操作系统环境:Ubuntu 20.04 Redis版本:6.2.8 准备工作 如果已经安装过了,找到自己的安装路径。如果没有安装过,去官网下载 当前最新版本是7.0,我这里用的是6.0,下载 redis-6.2.8.tar.gz&#xff0c…

CAPL学习之路-测试功能集函数(测试报告部分)

测试功能集函数用于测试用例的实现,主要使用场景在test module和test unit模块的capl中 。所以千万不要在网络节点的CAPL脚本中使用,不然会报错。比如TestWaitForTimeout()函数,等待指定的时间 在网络节点的capl脚本中使用时会报错: 在test module节点的capl脚本中使用时正…

SpreadJS集算表联动数据透视表,高效实现前端数据多维分析

在做一些财务、供应链、资产管理等系统时,由于业务人员线下都是采用Excel来完成的,因此就需要将Excel中业务人员使用的功能都能在Web端系统实现,整体上的实现方案有三种: 完全自研一套具备Excel功能的组件;使用成品软…

Linux-tar打包与解压命令

tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件。 常用参数: -c&a…

布隆过滤器【美与不美之谈】

什么是布隆过滤器 布隆过滤器其实本质上来讲就是一种巧妙的数据结构,特点就是高效的插入和查询。 它能告诉我们:什么一定不存在,或者什么可能会存在 总结:布隆过滤器是概率性的。它只能告诉我们什么一定不存在,或者…

科技向“实”万物生长,2023年云计算五大技术趋势展望

科技云报道原创。 近日,全球最大的专业技术组织IEEE(电气电子工程师学会)发布了《IEEE全球调研:科技在2023年及未来的影响》。根据相关调研显示,云计算(40%)、5G(38%)、元宇宙(37%)将成为影响2023年最重要的技术,其中云计算位居首…

算法---模拟(2)

目录 一、模拟算法题目 (1)神奇的幻方 (2)Proceting the Flower (3)排座椅 (4)国王的游戏 (5)字典序最大的子序列 一、模拟算法题目 (1&…

Spring源码下载

一、Spring | Home 二、Projects->Spring Framework 三、点击小猫图片进入Spring Framework的代码仓 四、选择感兴趣的分支

如何实现高性能点赞(二)

1.3 Redis 的数据结构类型 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset&…

Mac M2芯 超详细k8s集群实战 - kubeadm

概述 我们准备搭建kubeadm的masterworker集群,实现k8s集群,master、worker在虚拟机上来执行,中间遇到了超级多的坑,都搞定了之后,在这里系统的总结一下,这也是一篇学习笔记。 这篇比较难搞,如…

【网络安全】Fastjson的反序列化漏洞复现

1.漏洞概述 Fastjson提供了autotype功能,允许用户在反序列化数据中通过“type”指定反序列化的类型,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时&…

qt简单UI使用

geometry设置窗口大小 font字体大小 text改文件名

本地使用隧道或代理访问云服务器数据库

本地使用代理访问云服务器数据库 场景: 项目的测试环境是部署至云服务器上的,有时候云服务器的项目测试出现了一些问题,为了方便复现就在本地直连云服务器的数据库(mysql服务器)。但是云服务器是有三台机子&#xff0…

性能测试工程师技术履历表

技术履历表 基本情况 姓名 XXX 年龄 26 性别 男 工作年限 3-4 岗位 性能测试工程师 毕业院校和专业 武汉软件工程职业学院 学历 大专 技能评价 1、熟悉基于Http,TCP等协议的脚本开发。 2、 熟练掌握:Loadrunner等压测工具。 3、 掌握Linu…

Echosync 一款优秀的文件夹同步和备份软件

Echosync 一款优秀的文件夹同步和备份软件 通过执行差异数据备份、文件同步,这样可以避免传递自上次备份以来所做的更改,Echosync能够检测到移动或重命名自上次备份的文件。 下载 Echosync 软件介绍 VHD中备份文件 你的文件可以保存到单个 VHD 文件…

RK3568 ov5695摄像头

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、什么是mipi接口?二、摄像头是如何把数据给到RK3568,又是如何处理硬件连接关系图:图像数据的来龙去脉代码路径三、如何移植修改设备树…

高通开发系列 - 数字和模拟codec驱动

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 MSM89XX音频硬件框架Linux kernel驱动LPASS的地址空间PM和PMI的区别PM8953简介Slave ID从设备idPM89xx中的模拟codec驱动准备codec的驱…

进程退出与等待

1️⃣ 进程退出 正常终止 main函数的返回调用exit_exit 异常终止 Ctrl c (信号终止) 1.main函数的返回就是return 0;程序退出这个在高级语言里面就学过了不多说。 2.exit(x)的使用如下 第一次测试:错误码与main函数里面打印的值。 第二次测试&#xf…

[oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

查看进程 回忆上次内容 上次先进程查询 ps -elf 查看所有进程信息ps -lf 查看本终端相关进程信息 杀死进程 kill -9 PID 给进程发送死亡信号 运行多个 python3 show_time.py 的话 各个进程独立python3 show_time.py 大概 8M各占内存这些进程之间是什么关系呢?&…