ES6方法随笔

69 阅读2分钟

1.对象属性添加

const obj = {};
const index = 1;
const attr = `sun${index}`;

obj[attr] = '新增属性';

// es6对象属性名可以用表达式

obj[`sun${index}`] = '新用法';

2.解构

let obj = {
  a: 1,
  b: 2,
  c: 3
}
// 传统对象取值

const a = obj.a;
const b = obj.b;
const c = obj.c;

// 或者
const num = obj.a + obj.b
//代码雍总

//es6取值 ----解构

const {a,b,c} = obj;
const sum = a + b;
// 如果原对象中的属性名不是我想要的可以这样
const {a:a1} = obj;
console.log(a1); // 1

//无法解构 undefined 、 null,否则报错

const {a,b,c} = obj || {}

3.可选链操作符

const obj = {
    attr: {
        name: 'ddd'
    }
};
//这样获取可能会报错
let getName = obj.attr.name
// 这样就不会报错
let getName = obj && obj.attr && obj.attr.name
//es6简写
let getName = obj?.attr?.name

4.空值合并运输符

// 当运算符左边的值为undefined 和 null 时,返回右边的值,反之为左边


const foo = null

console.log(foo ?? 'xiaoning') // xiaoning

console.log( 0 ?? 42) // 0

// 经典用法 输入框非空判断

if(value !== undefined && value !== null && value !== '') {
    console.log('输入框不为空')
}

if ((value ?? '') !== '') {
    console.log('输入框不为空')
}

5.模板字符串

const mingzi = '小宁'

const age = 35;

// ${}中可以放入js任意的表达式

const result = `${mingzi}${age > 30?'的成绩不合格': '的成绩合格'}`;

console.log(result)// 小宁的成绩不合格

6.判断对象为空

var obj = {}
Object.keys(obj).length === 0; // true

7.展开运算符

// 以前合并数据和对象

const a = [1,3,5];
const b = [1,4,8];

const c = a.concat(b)// ][1,3,5,1,4,8]

// 数组还没有去重


const d = { a: 1};
const e = { b: 1};


const f = Object.assign({},d,e); // {a: 1, b: 1}

// es6 合并

const arr = [...new set([...a,...b])]

const obj = {...d,...e}

8.其他--画个三角形

.sanjiaoxing {
            width: 0;
            height: 0;
            border-bottom: 200px solid red;
            border-left: 200px solid transparent;
            border-right: 200px solid transparent;
        }

9.for..of 和 for..in 的区别

for...in 循环:只能获得对象的键名、数组和字符串的下标,不能获得键值

for...of 循环:允许遍历获得键值

var arr = ['red', 'green', 'blue']

var obj = {
	'name': 'Jim Green',
	'age': 12
  }
// for..in

//遍历数组
for(let item in arr) {
console.log('for in item', item)
}
	/*
		for in item 0
		for in item 1
		for in item 2
	*/

//遍历对象
for(let key in obj) {
	console.log('for in key', key)
}
	/*
		for in key name
		for in key age
	*/

// for of

//遍历数组
for(let item of arr) {
  console.log('for of item', item)
}
/*
  for of item red
  for of item green
  for of item blue
*/
//遍历对象
//对于普通对象,没有部署原生的 iterator 接口,直接使用 for...of 会报错
for(let key of obj) {
	console.log('for of obj', key)
}
// Uncaught TypeError: obj is not iterable

也可以使用 Object.keys(obj) 方法将对象的键名生成一个数组,然后遍历这个数组

for(let key of Object.keys(obj)) {
	console.log('key', key)
}
  /*
	key name
	key age
  */

for...in 循环不仅遍历数字键名,还会遍历手动添加的其它键,甚至包括原型链上的键。for...of 则不会这样

let arr = [1, 2, 3]
arr.set = 'world'  // 手动添加的键
Array.prototype.name = 'hello'  // 原型链上的键
 
for(let item in arr) {
  console.log('item', item)
}
 
/*
  item 0
  item 1
  item 2
  item set
  item name
*/
 
for(let value of arr) {
  console.log('value', value)
}
 
/*
  value 1
  value 2
  value 3
*/