es6体会

1 篇文章 0 订阅

es6零零散散

记录一些平时工作用到的,觉得比较使用的es6语法
1.let:let和var 有区别:var存在变量提升,let没有
2.const:const声明下分两种情况:

  1. 声明简单类型不可重复赋值
  2. 声明复杂类型比如对象,可以改变对象的属性,但不能直接改变变量指向另一个内存

有点绕口,例如:

//变量提升问题-------------------------------------
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值