es6零零散散
记录一些平时工作用到的,觉得比较使用的es6语法
1.let:let和var 有区别:var存在变量提升,let没有
2.const:const声明下分两种情况:
- 声明简单类型不可重复赋值
- 声明复杂类型比如对象,可以改变对象的属性,但不能直接改变变量指向另一个内存
有点绕口,例如:
//变量提升问题-------------------------------------
console.log(a); //undefined
var a = 5;
console.log(b); //报错
let b =5;
//变量提升问题-------------------------------------
//const问题--------------------------------------
//情况1
const a=1
a = 2 //报错 不能改不能改不能改 只能注释到这句才能运行
console.log(a) // 1
//情况2
const b = {a:1}
b.a = 2
console.log(b.a) //2
//const问题--------------------------------------
3.let 和var的区别漏了 ,这里补上
//es5没有块级作用域的概念,let时es6新增的一个带有块级作用域的关键字
//下面这个两个例子对比的时候就很清楚了:
//-----------------------------------var
for(var i = 0; i < 10; i++) {
console.log('ggg')
}
console.log(i) //这里可以访问到i=10
//-----------------------------------var
//-----------------------------------let
for(let j = 0; j < 10; j++) {
console.log('ggg')
}
console.log(j) //这里直接报错,j未定义
//-----------------------------------let
所以,目前这个情况,能用let就用let叭,好掌控~~少数情况可以用var(暂时我还不知道哈哈)
4.Object.assign(target, …source): 合并多个对象到目标对象,返回这个对象
5.给对象增加迭代器
对象增加迭代器之后可以进行for…of遍历
let obj = {
name: 'ya',
age: 25,
*[Symbol.iterator]() {
for(let i in obj) {
yield[i,obj[i]]
}
}
}
for(let [key, value] of obj) {
console.log(key, value)
}
2021.3.15追加:
Object.assign()
实际上对每个源对象执行的是浅复制。浅复制意味着:
dest = {};
src = { a: {} };
Object.assign(dest, src);
// 浅复制意味着只会复制对象的引用
console.log(dest); // { a :{} }
console.log(dest.a === src.a); // true
主要是下面这个情况:
在合并多个对象时,如果多个对象拥有相同的属性,那么合并的时候是什么情况(规则)呢?
来试一下:
dest = { id: 'dest' };
result = Object.assign(dest, { id: 'src1', a: 'foo' }, { id: 'src2', b: 'bar' });
// Object.assign会覆盖重复的属性
console.log(result); // { id: src2, a: foo, b: bar }
可以粗略的看到目标对象的id被覆盖了。那么,覆盖的具体过程呢。我们可通过访问属性特性(关于访问属性,//TODO 后面另一个文章还是草稿,发布之后这里加一个超链接。:)set来探究一下。
// 可以通过目标对象上的设置函数观察到覆盖的过程:
dest = {
set id(x) {
console.log(x);
}
};
Object.assign(dest, { id: 'first' }, { id: 'second' }, { id: 'third' });
// first
// second
// third
一些使用过的体会,其他的用到再慢慢加。。。。
6.Math.pow()的简写形式
console.log(Math.pow(3, 2); // 9
console.log(3 ** 2); // 9
console.log(16** 0.5); // 4 开平方
7.Array.from()
我会在另一篇文章中做具体介绍。点这里《红宝书》章6,等写完了发布再加上链接
2021.3.11 先把章6发出来吧,前段时间开发java项目,陆陆续续有在写文章,但是都是看书或者项目中遇到的问题,都保存在草稿中没有发布,因为发布之后再修改就是重新发布。。。感觉不太好,草稿中就比较好修改和新增一些,目前草稿中存了14篇。。后面等红宝书看完了一起发吧。
8. 对象解构
先说结论:
使用解构,可以在一个类似对象字面量的结构中,声明多个变量,同时执行多个赋值操作
看一下具体使用
// 使用对象解构
let person = {
name: 'Matt',
age: 27
};
let { name: personName, age: personAge } = person;
console.log(personName); // Matt
console.log(personAge); // 27
上面这种情况是解构赋值的变量名和属性名称不一致,否则可以:
let person = {
name: 'Matt',
age: 27
};
let { name, age } = person;
console.log(name); // Matt
console.log(age); // 27