// ES6+语法
/**
* let:变量不能重复声明;有块级作用域;不存在变量提升;不影响作用域链;在双层for循环中,即使计数器相同,也能互不影响
* const:一般用于声明常量,一定要赋初始值,有块级作用域,常量的值不能修改,但可以修改原有属性的属性值
* 解构赋值
* 模版字符串
* 对象简化写法(变量和属性名一致的话可以直接写一个)
* 箭头函数:没有this,始终指向上一层作用域;不能作为构造实例化对象;不能使用arguments变量;
* 当形参有且只有一个的时候可以省略小括号;当代码体质优一条语句时,return也可以省略
* 函数参数默认值:可以给形参附初始值
* rest参数可以重新赋值
* 扩展运算符:数组的合并:const C = [...A, ...B]
* Symbol:值是唯一的,用来解决命名冲突问题;不能与其他数据进行运算;不能用for...in循环便利,但可以使用Reflect.ownKeys获取对象的所有键名;
* 或通过Object.getOwnPropertySymbols来获取所有Symbol键名
* Promise
* Set集合
* Map集合
* 对象扩展方法:Object.is:判断两个值是否完全相等(Object.is(1,1) => true
* 模块化:防止命名冲突;代码复用;高维护醒;模块化规范产品;模块功能主要有两个命令构成:export和import
* ES6之前的模块化规范有:CommonJS ===> NodeJs、Browserify、AMD ===> requireJS、CMD ===> seaJS
* includes
* async/await
* 字符串扩展方法:str.trimStart() // 清空头空格、str.trimEnd() // 清空尾空格
* flat:扁平化数组
*/
// let
let arr = [1, 2, 3]
for (let i = 0; i < arr.length; i++) {
for (let i = 0; i < arr.length; i++) {
// console.log(i)
}
}
// rest
let fn = (...args) => {
args = 11
// console.log(args)
}
fn(1, 2, 3)
// 对象方法扩展
const school = {
name: 'tom'
}
const cities = {
city: ['GZ']
}
console.log(Object.setPrototypeOf(school, cities)) // 为现有对象设置原型,返回一个新对象:参数1:现有对象,参数2:原型对象
console.log(Object.getPrototypeOf(school))
console.log(school)
console.log(cities)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Observe demo</title>
</head>
<body>
<p>响应式 demo</p>
<p>响应式 demo</p>
<p>响应式 demo</p>
</body>
</html>