我的前端自学 ES6

(一)ES6中的新增语法
1 . let
let关键字是ES6中新增的用于声明变量的关键字,用来代替 var
①使用let关键字声明的变量具有块级作用域(一对大括号{}产生的作用域,块级作用域中的变量只能在同一个作用域内访问)

if (true) {
 	let a = 0;
 	let b = 0;
 	if (true) {
 		console.log(a); // 0
 	}
 }
 console.log(b) // b is not defined

②使用let声明的变量没有变量提升,必须先声明,再使用

console.log(a); // undefined
var a = 0;

console.log(b); // 报错
let b = 0;

③使用let声明的变量会出现暂时性死区

var a = 0;
if (true) {
	a++; // 报错,块级作用域外声明的a变量对块级作用域内无法造成影响
	let a = 10;
}

2 .const关键字
用于声明常量,常量就是值(内存地址)不能变化的量
①使用const声明的常量也具有块级作用域
②使用const声明常量时,必须赋值

const a; // 这是不允许的

③常量赋值后,对应的内存地址不可更改

// 基本数据类型
const PI = 3.14;
PI = 0; // 报错

// 复杂数据类型
const array = [1, 2, 3];
array[0] = 4;
array[1] = 5;
array[2] = 6; // 这是合法的更改,因为并没有改变数组的内存地址

array = [4, 5, 6]; // 报错,因为常量的内存地址改变了

3 .解构赋值
ES6中允许从对象中提取值,按照对应位置,对变量赋值
如果值的数量和变量数量不对等,多余的变量的值为undefined

let arr = [1, 2, 3];
let [a, b, c] = arr; // a = 1 , b = 2 , c = 3
let obj = {
	id: 1,
	name: "张三",
	age: 18
}
let {id, name, age} = obj; 
// 自定义变量对象解构
let {id: a, name: b, age: c} = obj;

(二) 箭头函数
const fn =(参数)=> { JScode }

①如果函数体中只有一句代码,并且执行的结果就是返回值,那么就可以省略大括号

let fn = (a, b) => a + b;
fn(1, 2);

②如果形参只有一个,可以省略小括号

let fn = a => ++a;
fn(1);

2 .箭头函数中的this
箭头函数本身不绑定this,箭头函数中的this指向的是函数定义位置的this

let obj = { id: 1 };
function fn() {
	return () => { console.log(this) };
}
let result = fn.call(obj);
result(); // { id: 1 }

3 .剩余参数语法(展开运算符)
剩余参数语法允许我们将一个不定数量的参数表示为一个数组,使用三个点表示

function sum(a, b, c) {
	return a + b + c;
}
let theArgs = [1, 2, 3];
console.log(sum(...theArgs)); // 6

function fn(a, ...args) {
	console.log(args);
}
fn(1, 2, 3);// [2, 3]

// 计算任意个数数字的和
const getSum = (...args) => {
	let total = 0;
	args.forEach(items => total += items);
	return total;
}
console.log(getSum(10, 22, 33)); // 65

剩余参数用于解构赋值:

let arr = [1, 2, 3];
let [a, ...args] = arr;
console.log(args); // [2, 3]

let obj = {
	id: 1,
	name: "张三",
	age: 18
}
let {id: theID, ...theArgs} = obj;
console.log(theArgs); // { name: "张三", age: 18 }

展开运算符用于合并数组:

let ary1 = [1, 2];
let ary2 = [3, 4];
let newAry = [...ary1, ...ary2]; // [1, 2, 3, 4]

let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5, 6]; // [1, 2, 3, 4, 5, 6]
// 也可以用于push函数
arr2.push(...arr1); //[1, 2, 3, 4, 5, 6, 1, 2, 3]

用于将伪数组转换为真正的数组:

let set = new Set([1, 2, 3]); //伪数组 set(3){1, 2, 3}
set = [...set]; // 真数组 [1, 2, 3]

将伪数组转换为真数组还有个数组构造函数方法:Array.from();

let set = new Set(["rose", "jack", "吴老二"]);
let newSet = Array.from(set);
console.log(newSet); // ["rose", "jack", "吴老二"]

该方法还可以接受第二个回调函数参数,用来处理数组中的每一个元素

let set = new Set(["rose", "jack", "吴老二"]);
let newSet = Array.from(set, items => items + 1);
console.log(newSet); // ["rose1", "jack1", "吴老二1"]

剩余参数和函数内置对象arguments的区别:
1.剩余参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。
2.arguments对象不是一个真正的数组,而剩余参数是真正的 Array实例,也就是说你能够在它上面直接使用所有的数组方法,比如 sort,map,forEach或pop。
3.arguments对象还有一些附加的属性

4 .Array 的扩展方法

①find()用于查找第一个符合条件的数组元素并返回值

let ary = [{
	id: 1,
	name: "first"
	}, {
	id: 2,
	name: "second"
}];
let getEle = ary.find(items => items.id == 1);
console.log(getEle); // {id: 1, name: "first"}

②findIndex()用于返回数组中符合条件的第一个元素的位置

let arr = [1, 11, 9, 15, -3];
let resutl = arr.findIndex(items => items > 10);
console.log(result); // 1

③includes()用于检查数组中是否包含指定元素,此方法也适用于字符串

let ary1 = [1, 2, 3];
console.log(ary.includes("sleep")); // false
console.log(ary.includes(1)); // true

(三)模板字符串
ES6新增的创建字符串的方式,使用反引号表示

let str = `模板字符串`;

模板字符串中可以解析变量,效果相当于拼接字符串,变量用${}包裹

let message = "Hello!";
let sayHello = `${message}干哈去啊?`
console.log(sayHello); //Hello!干哈去啊?

模板字符串中可以换行

let msg = {
	name: "张三",
	age: 18
}
let html = `
	<li>
		<span>${msg.name}</span>
		<span>${mes.age}</span>
	</li>
`;

模板字符串中可以调用函数

let say = mes => mes;
let msg = `${say('hi~')}`;
console.log(msg); // hi~

(四)字符串扩展方法
① 判断字符串是否以指定字符串开头

var str = "字符串扩展方法";
str.startsWith("字"); // true

②判断字符串是否以指定字符结尾

var str = "字符串扩展方法";
str.endsWith("串"); // false

③repeat()方法用于将原字符串进行重复,返回重复后的新字符串,它接收一个整数数字作为参数

let str = "字符串重复";
let newStr = str.repeat(3);
console.log(str); // "字符串重复字符串重复字符串重复"

(五)SET数据结构

1 .ES6提供了新的数据结构set,它类似与数组,但是成员的值都是唯一的,没有重复的值
Set本身是一个构造函数,用来生成Set数据结构。

const set = new Set(数组参数);

2 .Set数据结构的长度size
size用来返回一个Set数据结构的长度(元素个数),相当于数组的length

const s = new Set([1, 2, 3]);
console.log(s.size); // 3

3 .Set数据结构用于数组去重

let arr = ["aa", "bb", "cc", "aa", "bb", "cc"];
let set = new Set(arr);
set = [...set];
console.log(set); // ["aa", "bb", "cc"]

4 .Set数据结构数据操作

const s = new Set(["aa", "bb", "cc"]);
// 添加数据 add() 可以链式调用
s.add("dd").add("ee");
// 删除数据 delete()
s.delete("aa");
// 检测是否存在指定数据 has() ,返回布尔值
s.has("ab"); // false
// 清空Set数据结构中的所有数据
s.clear();

5 .Set数据结构遍历

Set结构和数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。

s.forEach(item => console.log(item));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值