ES6:let、const、解构赋值

目录: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'...]

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容