let的解构赋值_ES6:let、const、解构赋值

本文详细介绍了ES6中的let、const关键字以及解构赋值的概念和用法。let声明的变量有块级作用域,不能重复声明但可以重新赋值;const用于声明常量,赋值后不能更改。解构赋值在数组和对象中的应用,如数组的按序赋值、扩展运算符的使用,以及对象属性的无序赋值和默认值等。同时,文章还涵盖了字符串的解构赋值情况。
摘要由CSDN通过智能技术生成

目录:let、const、解构赋值

======let 及 块级作用域======— — let — —

1、let声明变量 有块级作用域的概念,不会污染到全局;

2、let或者const声明的变量,不能重复声明,但可以重新赋值;如let num = 1;let num = 2 会报错,直接重新赋值num = 2 则可以。

3、let不会预解析(如果使用变量前没有声明,会报错未定义的;)

— — 块级作用域 — —

{}花括号内就是块级作用域,例如直接一个{}包含,或者if(){}、for(){},需要注意的是,对象的{}不是块级作用域。

扩展知识 — —暂存死区— — 别乱写就不会有这个问题,具体百度

======const======const 声明的是 常量

1、常量在声明的时候必须赋值

2、常量不能重复声明与赋值,与let不同,不管重复声明还是赋值都是不行的

3、常量不会预解析提升

4、常量有块级作用域的概念

5、常量是引用类型(对象、数组、函数)时,里面的数据可以修改,例如 const obj = {age : 10},obj.age = 20 是会生效,可以修改的,但是对象本身不能被修改,const obj = {age : 20}是不行的,只能修改里面的数据,不能修改指向的地址

6、让常量里面的数据也不能修改的方法:Object.freeze() 括号内填常量名,这样就会冻结里面的数据,无法增删改

7、ES6前,声明常量的方法:

使用object.defineProperty(让数据不能修改) 和object.seal(不能扩展数据)方法搭配完成

var obj = { age : 1 }

object.defineProperty( obj(对象名字), ' age(属性名) ',{ writable : false(不能修改)    } ) 就能让对象里面的数据不能修改

object.seal (obj) 填入对象名,就能让对象不能扩展数据

封装成一个函数(未完成,如果里面还有一个对象,里面对象的数据还是能修改)

======数组的解构赋值======------例子------数组是有排序的,对应顺序获取想要的值

const arr = [1, 2, 3, [4, 5, [6, 7] ] ];

const [,,, a] = arr  =》 a = [4,5 [ 6,7 ] ]  很简单 忘了自己再去试

-----  扩展运算符 ... -------

const arr = [1, 2, 3, [4, 5, [6, 7] ] ];

const [ , , ...a ]  =》 取的是 [ 3,[ 4,5,[ 6,7 ] ] ] ...a取的是剩下的所有值

const arr1 = [ 1,2 ]   const arr2 = [ 3,4 ]

const arr3 = [ ...arr1,...arr2 ]    =》  [ 1,2,3,4 ]  会把两个数组合并成一个数组

可以先理解为,会把数组、对象里的值或属性拆分合并在一起获取

------- 交换变量 --------

let、var  a   =  10;   let、var   b   =   20;

[ a,b ]   =  [ b,a ]   两个变量的值就交换了,如果声明的是常量则不能交换

--------接收多个 函数返回值---------

function getUserInfo(id){

return  [(1)true,(2){  name:' 小明 ',   gender:' 女 ',   id:' id ' },(3) ' 请求成功 ' ];

};

const [ (1)status,(2)obj,(3)str ]  =  getUserInfo(123);

函数执行后返回的是一个数组,所以可以利用数组的解构赋值,获取到函数的返回值(数组中是第一个布尔值放在status中,第二个对象放在obj中,第三个字符串放在str中)

之前的做法是将函数的赋值给一个变量a(或者常量),然后通过变量a的[ i ] 赋值给各个变量b,c,d(或常量),才能够获取到函数的返回值

======对象的解构赋值======

------例子------  对象里的属性是无序的,所以是通过属性名解构赋值

-------结合扩展运算符---------

(1)获取

const obj = { name : ' 二狗 ',age : '100',sex : ' 男 ' }

const {...s}= obj     =>所有都获取到赋值给常量 s

const { name,...s }   =>  name以后的,都获取赋值给 s

(2)合并  扩展运算符会把对象、数组这些拆开与前面合并成一个对象、数组

const obj = {  name : '二狗', ... { age : '18', sex : '男' }  }

输出obj对象,结果为{name:'二狗',age:'18',sex:'男'}

-------默认值---------

和数组一样,如果是let声明的,某个属性的值是空,可以给他赋值,如果有值(包括null)则改变不了原有的值,也可以给它添加新属性;

---------使用对象传入乱序的函数参数----------常用要掌握

---------获取多个函数返回值-----------和数组差不多

====== 字符串的解构赋值 ======

按顺序获取,一个个字符,可以提取字符串的属性:length、split

const str =  'I Love You';

const [a, b, ...o] = str;      a  = 'I'     b = ' '    o  =  ['L','o','v','e','','Y'...]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值