当前位置: 首页 > news >正文

解构赋值、函数默认值

暂时性死区,TDZ(Temporal Dead Zone)

var x = 1
{let x = x//此处声明了x,但是没有对x赋值,相当于在赋值之前引用x,所以会造成报错console.log(x)//报错x is not defined,暂时性死区,不能拿到父级作用域中的x
}
参数默认值
falsy(虚值):通过Boolean转化,转为假的值叫虚值
let x = 1
funciton foo(y = x){let x = 2 //在这之前会有暂时性死区console.log(y);// 执行后打印1,访问外层作用域的1
}
<--------------------->let x = 1;
function foo(x = 2){let x = 2;//此处会报错,x已经被声明过了,给默认值的时候相当于声明了一个x = 2console.log(x);
}
<--------------------->let x = 1;
function foo(x = x){let x = 2;console.log(x);
}
foo();//报错,由let x = 2引起
<--------------------->
let x = 1;
function foo(x = x){console.log(x);//x is not defined
}
foo();//报错,参数也有作用域
foo(11)//给了值就打印11
<--------------------->var w = 1, z = 2;
function foo(x = w + 1, y = x + 1;z = z +1){console.log(x,y,z);//报错,z is not defined,此时x = w + 1,w找的是外层作用域的w, y = x + 1;此处的x找的是,前面x = w + 1中的x,到此处不会报错,接着z = z + 1,此处,z + 1中找的z是等号前面的z,即使外层有z,也不会找,因此会在此处报错
}
foo()
// 如果这样打印
var w = 1, y = 6;
function foo(x = w + 1, y = x + 1){console.log(x,y);// 打印2,3,从而可以看出y取值并不是是取的外层的x
}
foo()
函数的参数为表达式时,函数的执行
函数的参数为表达式的情况下,此时的加载方式,是惰性求值的方式
let a = 99
function foo(b = a + 1){ //此时参数传的值都是进行重新计算的一个值console.log(b)
}
foo()//100
a = 100
foo()//101

解构赋值

ES6新增的一个语法特征

数组解构

没有解构赋值之前我们定义三个变量会这样写

let a = 1,b = 2,c = 3;```
有解构之后可以这么写
解构通过模式匹配的方式或者叫结构化赋值(匹配相同的解构进行赋值)
```js
let [a, b, c] = [1, 2, 3]

解构失败,变量如果在右边没有对应的值,就会用undefined填充;不完全解构,就是值多了
解构默认值

let [a = 6] = [1]
console.log(a)//1
let [a = 6] = []
console.log(a)//6
let [a, b=2] = [1]
console.log(a,b)//a:1,b:2,a被赋值,b使用默认值
//除了undefined会取默认值,其他的都会取传入的值
let [a, b = 2] = [1, undefined]
console.log(a, b)//1, 2
let [a, b = 2] = [1, null]
console.log(a, b)//1, 2
// 默认值也可以给函数,模式匹配有值先取值,没值再去找默认值,从而执行这个函数
function test(){console.log(1)
}
let [x = test()] = [1]
console.log(x)//可以正常打印1
let [x = 1, y = x] = []
console.log(x,y)//1,1
let [x = 1, y = x] = [2]
console.log(x,y)//2,2
let [x = 1, y = x] = [1, 2]
console.log(x,y)//1,2,有值取值,没值访问默认值
let [x = y, y = 1] = []
console.log(x,y)//报错y is not defined,在定义y之前使用了y

对象解构

ES5定义对象的几种方式
let obj = {}
let obj1 = new Object()
let obj2 = Object.create(null)
var name = 'zhangsan'
var age = 12
let person = {name,//属性名和变量名一致可以省略,直接写属性名age,sex: 'male',eat(){//如果对象属性是方法 ES6可以这样写console.log('apple')}
}
// 属性名拼接
let fName = 'xiao'
let sName = 'ming'
let name = 'xiaoming'
let person1 = {[fName + sName]: name
}

结构完全一样的两个对象可以通过解构进行变量赋值

let {a: a, b: b,c: c} = {a: 1, b: 2, c: 3}
不完全解构和解构失败
// 不完全解构,值比变量多
let {a = 1, b, c } = {a: 1, b: 2, c: 3},e: 4,f:5}
// 解构失败,变量比值多,没有解构的就会赋值为undefined
let {a = 1, b, c,e } = {a: 1, b: 2, c: 3}

数组的解构会存在顺序问题,而对象的解构不会有顺序问题,它是根据对应的属性名进行解构的
如何取出wangwu?

var person = {name: 'zhangsan',age: 50,son:{name: 'lisi',age: 30,son:{name: 'wangwu',age: 12}}
}
let {son:{son:son1} = person
console.log(son1)//就是王五这个人

相关文章:

解构赋值、函数默认值

暂时性死区&#xff0c;TDZ&#xff08;Temporal Dead Zone&#xff09; var x 1 {let x x//此处声明了x&#xff0c;但是没有对x赋值&#xff0c;相当于在赋值之前引用x&#xff0c;所以会造成报错console.log(x)//报错x is not defined&#xff0c;暂时性死区&#xff0c;…...

【已解决】Mybatis 实现 Group By 动态分组查询

&#x1f389;工作中遇到这样一个需求场景&#xff1a;实现一个统计查询&#xff0c;要求可以根据用户在前端界面筛选的字段进行动态地分组统计。也就是说&#xff0c;后端在实现分组查询的时候&#xff0c;Group By 的字段是不确定的&#xff0c;可能是一个字段、多个字段或者…...

Android修改默认gradle路径

Android Studio每次新建项目&#xff0c;都会默认在C盘生成并下载gradle相关文件&#xff0c;由于C盘空间有限&#xff0c;没多久C盘就飘红了&#xff0c;于是就需要把gradle相关文件转移到其他盘 1、到C盘找到gradle文件 具体路径一般是&#xff1a;C:\Users\用户\ .gradle …...

原生JS+canvas实现炫酷背景

原生JScanvas实现炫酷背景 可以在需要的背景页使用 <!doctype html> <html> <head> <meta charset"utf-8"> <title>HTML5 Canvas矩阵粒子波浪背景动画特效</title> <style> html,body { height:100%; } body { …...

Linux学习之NAS服务器搭建

NAS是Network Attached Storage的缩写&#xff0c;也就是网络附属存储。可以使用自己已经不怎么使用的笔记本搭建一台NAS服务器。 fdisk -l可以看一下各个磁盘的状态。 可以看到有sda、sdb、sdc和sdd等四块硬盘。 lvs、vgs和pvs结合起来看&#xff0c;sdb和sdc没有被使用。 …...

分享码云上8个宝藏又有价值的开源图片编辑器

如果你需要高效地处理图片&#xff0c;那么这8款实用工具是可以尝试的&#xff01; 它们能够进行一键抠图、放大、拼接、转矢量图、图标自动生成以及等操作&#xff0c;让你的工作效率飞升&#xff01; 在Gitee这个最有价值的开源项目计划是Gitee综合评定出的优秀开源项目的展示…...

TCP Header都有啥?

分析&回答 源端口号&#xff08;Source Port&#xff09; &#xff1a;16位&#xff0c;标识主机上发起传送的应用程序&#xff1b; 目的端口&#xff08;Destonation Port&#xff09; &#xff1a;16位&#xff0c;标识主机上传送要到达的应用程序。 源端&#xff0c;目…...

无涯教程-Android - AutoCompleteTextView函数

AutoCompleteTextView是一个类似于EditText的视图&#xff0c;只是它在用户键入时自动显示补充数据。 AutoCompleteTextView - 属性 以下是与AutoCompleteTextView控件相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关方法。…...

【Docker】 07-安装ElasticSearch、Kibana

安装ElasticSearch 1、拉取镜像 docker pull elasticsearch:6.4.2 2、运行 docker run -p 9200:9200 -p 9300:9300 --name es -d elasticsearch:6.4.2 启动会报错&#xff0c;按照下面流程修改 3、在宿主机中&#xff0c;修改配置sysctl.conf vim /etc/sysctl.conf 加入如下配…...

【数据结构篇】线性表1 --- 顺序表、链表 (万字详解!!)

前言&#xff1a;这篇博客我们重点讲 线性表中的顺序表、链表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列... 线性表在逻辑上是…...

C语言每日一练--Day(17)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;数对 截取字符串 &#x1f493;博主csdn个人主页&#xff1a;小小unico…...

8月琐碎但值得的事情

8月份结束了&#xff0c;最近心态比较好&#xff0c;慢点就慢点&#xff0c;没有那么着急了&#xff0c;可能是因为着急也没啥办法&#xff0c; 8月是比较开心的一个月&#xff0c;可能是做的事情更有盼头了&#xff0c;可能是看了喜欢的书&#xff0c;可能是我变瘦了&#xff…...

苹果Mac系统如何优化流畅的运行?提高运行速度

Mac系统的稳定性和流畅性一直备受大家称赞&#xff0c;这也是大多数人选择Mac的原因&#xff0c;尽管如此&#xff0c;我们仍不时地对Mac进行优化、调整&#xff0c;以使其比以前更快、更流畅地运行。以下是小编分享给各位的Mac优化方法&#xff0c;记得保存哦~ 一、释放被过度…...

Python 类和对象

类的创建 Python语言中&#xff0c;使用class关键字来创建类&#xff0c;其创建方式如下&#xff1a; class ClassName(bases):# class documentation string 类文档字符串&#xff0c;对类进行解释说明class_suiteclass是关键字&#xff0c;bases是要继承的父类&#xff0c;…...

VC++使用Microsoft Speech SDK进行文字TTS朗读

Microsoft Speech SDK下载地址 https://www.microsoft.com/en-us/download/details.aspx?id10121 需要msttss22L.exe、SpeechSDK51.exe、SpeechSDK51LangPack.exe三个&#xff0c;下载后全部安装 使用VS2005建立一个win32控制台项目 朗读"hello word"、中文“你好”…...

FFmpeg4.3.1+h264在windows下编译与VS2017项目集成

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。本文是音视频系…...

mapboxGL3新特性介绍

概述 8月7日&#xff0c;mapboxGL发布了3版本的更新&#xff0c;本文带大家一起来看看mapboxGL3有哪些新的特性。 新特新 如上图所示&#xff0c;是mapboxGL官网关于新版的介绍&#xff0c;大致翻译如下&#xff1a; 增强了web渲染的质量、便捷程度以及开发人员体验&#xff…...

类ChatGPT大模型LLaMA及其微调模型

1.LLaMA LLaMA的模型架构:RMSNorm/SwiGLU/RoPE/Transfor mer/1-1.4T tokens 1.1对transformer子层的输入归一化 对每个transformer子层的输入使用RMSNorm进行归一化&#xff0c;计算如下&#xff1a; 1.2使用SwiGLU替换ReLU 【Relu激活函数】Relu(x) max(0,x) 。 【GLU激…...

50个简洁的提示提高代码可读性和效率(0-10)

这篇文章整理了50个简洁的提示&#xff0c;可以提高您的代码可读性和效率。这些提示来自个人项目、彻底的代码审查和与资深开发人员的启发性讨论。 无论您是新手还是经验丰富的开发人员&#xff0c;这篇文章都应该能够帮助您学到一些东西。 这个列表包括常见的Python模式、核…...

Linux —— 进程信号

一&#xff0c;信号概念 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断&#xff1b; 系统定义的信号 每个信号都有一个编号和一个宏定义名称&#xff08;可在signal.h查看&#xff09;&#xff1b;编号34以上的为实时信号&#xff1b; [wz192 Desktop]$ kill -…...

虚拟机异常断电后卡在initramfs阶段?手把手教你用xfs_repair修复系统分区

1. 虚拟机异常断电的常见后果 最近在调试一个基于KVM的虚拟机集群时&#xff0c;遇到了一个典型问题&#xff1a;机房突然断电后&#xff0c;几台虚拟机重启时卡在了initramfs阶段&#xff0c;屏幕上不断刷出"generating /run/initramfs/rdsosreport.txt"的提示。这种…...

从Type-C到CH347F:手把手教你设计一块与众不同的STM32H743开发板(附完整原理图)

从Type-C到CH347F&#xff1a;打造高集成度STM32H743开发板的实战指南 当市面上充斥着千篇一律的STM32开发板时&#xff0c;如何设计一款既能满足高性能需求又能简化开发流程的差异化产品&#xff1f;本文将带你深入探索基于STM32H743和CH347F芯片的开发板设计全过程&#xff…...

我的世界Waterfall跨服配置避坑指南:从‘连接被拒绝’到流畅穿梭的完整排错流程

我的世界Waterfall跨服配置避坑指南&#xff1a;从‘连接被拒绝’到流畅穿梭的完整排错流程 当你兴奋地搭建好Waterfall跨服架构&#xff0c;却在测试时遭遇"连接被拒绝"的红色提示&#xff0c;或是玩家卡在大厅无法切换子服时&#xff0c;那种挫败感我深有体会。本文…...

OWL ADVENTURE应用场景解析:如何用AI助手提升工作效率

OWL ADVENTURE应用场景解析&#xff1a;如何用AI助手提升工作效率 1. 为什么选择OWL ADVENTURE作为AI助手 在当今快节奏的工作环境中&#xff0c;我们每天都要处理大量视觉信息——从产品图片到数据图表&#xff0c;从设计稿到文档扫描件。传统的工作流程往往需要人工逐一查看…...

KittenTTS终极指南:如何在CPU上实现25MB轻量级TTS语音合成

KittenTTS终极指南&#xff1a;如何在CPU上实现25MB轻量级TTS语音合成 【免费下载链接】KittenTTS State-of-the-art TTS model under 25MB &#x1f63b; 项目地址: https://gitcode.com/gh_mirrors/ki/KittenTTS KittenTTS是一款革命性的轻量级文本转语音工具&#…...

英飞凌TC377芯片选型指南:从300MHz三核到FlexRay,汽车电子工程师如何快速上手?

英飞凌TC377芯片选型实战&#xff1a;汽车电子工程师的黄金法则 当汽车电子工程师面对英飞凌TC377这颗"三核300MHz怪兽"时&#xff0c;数据手册上密密麻麻的参数表格往往让人无从下手。我曾参与过某新能源车企的域控制器开发&#xff0c;团队花了整整两周时间争论芯片…...

从百兆到千兆:RJ45网口背后的技术演进与协议优化全解析

从百兆到千兆&#xff1a;RJ45网口背后的技术演进与协议优化全解析 当你拿起一根普通的网线连接电脑时&#xff0c;可能不会想到这根看似简单的线缆背后隐藏着怎样的技术革命。从最初的10Mbps到如今的千兆以太网&#xff0c;RJ45接口承载了网络通信技术的巨大飞跃。本文将带你深…...

给SAP财务新人的年结实操笔记:从FAGLGVTR总账结转到F.07往来结转,一次讲清

SAP财务年结实战指南&#xff1a;从总账到往来的完整逻辑解析 刚接触SAP财务模块的新人面对年结时&#xff0c;往往会被一连串的事务代码和操作步骤弄得晕头转向。FAGLGVTR、AJRW、F.07这些看似冰冷的代码背后&#xff0c;其实蕴含着清晰的财务逻辑。本文将带你穿透操作表象&am…...

避开这些坑!海康威视嵌入式HR面常见‘送命题’与应答策略(附真实案例)

海康威视嵌入式HR面试避坑指南&#xff1a;6类高频"送命题"拆解与实战话术 在技术岗位的招聘流程中&#xff0c;HR面试往往是最容易被轻视却暗藏最多陷阱的环节。许多嵌入式开发者在技术面表现出色&#xff0c;却在看似轻松的HR面中意外折戟。通过对海康威视近三年嵌…...

硬件调试新纪元:85%效率提升的AMD Ryzen系统优化方案

硬件调试新纪元&#xff1a;85%效率提升的AMD Ryzen系统优化方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://git…...