es是js的标准
js是es的实现
浏览器对新标准的支持
let 与 块级作用域
let与var是一样的用来声明变量,不同的是let声明的变量只能作用于块级作用域
块级作用域:
- 除了对象的字面量声明,其他的花括号(if,for。。。)或者一个单独的花括号,都是块级作用域
- 块级作用域可以嵌套
- 里面的可以访问外面的变量,但是外面不能访问里面。与作用域有关
-----var声明的变量不受块级作用域的影响
------使用let或const声明的变量不能重新声明
-------let不存在变量提升(不能再声明前使用变量(var可以,只不过输出的是undefine))
如果在块级作用域中存在let或const声明的变量。他会形成一个封闭的作用域。即使上面的作用域存在同名变量也是
拿不到的,这就是暂存死区,会报错。
===============================================================================
let和const是在es6中,新增加的关键字。用于声明变量和常量。
let声明的变量,只在他声明的块级作用域中起作用
const声明的是只读常量,一旦声明不能修改
加一个自我执行的匿名函数后,i是作为参数传递进去的,所以他的值不是最终值,是每次循环的值
for循环比较特殊,每次循环都是一个全新的独立的块级作用域。所以用let声明的变量,在当前循环中的值
不会发生改变。所以输出的是每次的值。
-------------------------------------------------------------------------------------------------------------------------
const 声明的是常量,在声明时就赋值,后续不能改变。
与let类似,也只在块级作用域中生效
--------------------------------------------------------------------------------------------------------------------
变量的解构赋值
===================================
数组的解构赋值 解构赋值 将数组或对象中的值,提取到不同的变量中
如果只想要其中的一项,其他的位置就要空出来,但是逗号不能省略
更复杂的规则也是一样的,比如我们想要取得 7 这个数字,只需要按照规则则写一遍,不要的空出来。要的给一个新变量就可以
let [ , ,[ , ,[ , ,a]]] = arr;
扩展运算符(...),合并数组,还能将剩余的以数组方式赋值给变量。 显然也是es6规范才能用
在每个数组前 加三个点 就可以实现数组的合并
...c 会将剩下的所有参数作为数组,赋值给c
匹配不到的时候就会将undefined 赋值给变量 或者常量 let 和 const都能进行解构赋值
可以给他一个默认值 当没有匹配到undefined时 就给他赋这个默认值 null的话不会
如果函数返回的是一个数组,那么我们就可以对这个数组进行解构赋值
例如返回数组 [true,{name:'xiaoming',age:12},'success']
使用解构赋值 const [success,data,info] = 函数();返回值就会从数组中,保存到我们的变量中。
能够对数组进行解构赋值
========================================================================
对象的解构赋值
与数组解构赋值类似 只不过两边都是对象结构
对象解构,变量名要与属性名保持一致 因为他是根据属性名去匹配的。
找不到返回 undefined ,数组根据下标,对象用属性名匹配
对象的解构赋值 可以 嵌套数组的 解构赋值,只要保持结构一样就可以
方法就在于保持解构一致, 数组看下标,对象看属性
const和let都不能重复声明
对象的解构中,会存在属性名重复的情况。由于let和const都不允许重复声明,所以会报错。
给对象属性后面加冒号:起一个新的变量名 就会将那个变量名代表的变量值,赋值给新变量
剩余的值会作为对象,赋值给 oth ,这就是扩展运算符在 对象解构中的用法。上
合并对象
对象解构也一样 匹配不到或者匹配到undefined 可以给他一个默认值
对象的解构 可用于函数参数地传递。
如果一个函数的参数时一个对象,我们最终想要用的就是对象中的属性值。那么在参数位置,就可以对对象进行解构。
然后在函数内部使用。
也叫做:使用对象传入乱序的函数参数。因为与位置无关。
获取多个函数返回值。 函数返回的是对象,对 对象进行解构赋值。
=============================================================
字符串解构赋值
把每一个字符 都 解构出来,如果用扩展运算符 会将剩余的字符 以字符数组的形式,赋值给oth
可以用于分解字符串啊 哈哈哈 直接 ...oth
可以提取字符串的属性
============================================================
数值 与 布尔值的 解构赋值
==================================================
函数参数的解构赋值
解构赋值 我觉的最有用的地方就是 函数参数的解构赋值
以及我们接受到数据时,,对数据的解构赋值
es6 扩展
===========================================================
模板字符串
使用 反引号 (`)包起来的就是模板字符串,可以直接用 ${ } 将我们的值 拼接到字符串中,而不用使用+ 拼接
1.使用模板字符串,可以不用字符串拼接。直接${}就可以放在字符串中。
模板字符串可以直接换行 不需要再末尾进行转义
反引号 模板字符串
=============================================================
字符串 部分新方法
1.字符串补全方法
padStart :向前面补充字符串
padEnd :向后面补充字符串
接收两个参数,第一个参数指补全的个数(加上原有的,一共是多少个。不是从0数的,是总数)。第二个参数可以是任何类型。
2.repeat 重复 复制字符串
join方法用于将数组 转换成字符串。数组项之间用什么分割,是join参数指定的。如果是空字符串,数组中的内容就会连在
一起。 如果是一个字符串 str,那么就会以str 分割每项。。。。如果每项都是空字符串,并且有三项。那么拼接处是两
用一个字符串分隔拼接后,就相当于把分隔字符串连在了一起。
3.startsWith endsWith 判断字符串是否以某字符串开头 或 结尾 返回值 布尔
1、在块级作用域中 用 let 和 const声明变量,会形成封闭作用域。与外边没关系。
2、let 和 const 声明的变量不存在变量提升,不能再声明之前调用。
3,let声明的变量 只在自己的块级作用域中起作用,验证了 1 。const声明的是常量,在后面不能修改。