ES6(一)基础知识点整理

1、var 和let 的区别

var :
1.var 可以重复声明
2.作用域:全局作用域和函数作用域
3.会进行预解析
let :
 1.同一作用域下不能重复声明
 2.作用域:全局作用域和块级作用域(块级作用域指{})
 3.不进行预解析

2、块级作用域

在ES6之前作用域只有全局作用域和函数作用域,不存在块级作用域的概念。ES6中新增了块级作用域。块级作用域由{}包括,if语句和for语句里面的{}也属于块级作用域。

3、解构赋值

对象解构赋值
let obj = {
    
    
	a:1,
	b:2
}
let {
    
    a,b}= obj
console.log(a,b);//1 2
前面大括号里的要和对象里的属性名一一对应关系
数组解构赋值
let arr=["a","b","c"];
let [e,f]=arr;
console.log(e,f);//a b
前面的第一项对应数组的第一项,第二项对应数组的第二项,顺序保持一致。
//面试题 怎么快速交换a,b的值
let a = 0;
let b=1;
[a,b]=[b,a]

4、展开运算符

数组展开运算符

let arr=[1,2,3,4];
let arr2=["a","b",...arr,"c","d"];
console.log(arr2);//["a","b",1,2,3,4,"c","d"]

对象展开运算符

let obj ={
    
    
	a:1,
	b:2
}
let obj2={
    
    
	...obj,
	c:3,
	d:4
};
console.log(obj2);//{a:1,b:2,c:3,d:4}

剩余参数

var arr=[1,2,3,4]
let [a,b,...c]=arr;
console.log(a,b,c);//1 2 [3,4]  //前面的两个数据赋值给a,b 剩下的放在c里面

5、Set对象

Set 需要注意的是:

  • Set 是ES6提供的一种新的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值。
  • Set本身是一个构造函数,用来实例化生成Set数据结构。
  • Set对象允许你存储任何类型的唯一值,无论是原始值还是对象引用

Set 的属性和方法
1、size 属性相当于length属性

var arr = [2,4,7,1,3,2,8,6];
let s = new Set(arr);
console.log(s.size);//7   

2、clear()清空所有值

var arr = [2,4,7,1,3,2,8,6];
let s = new Set(arr);
s.clear();
console.log(s);

3、delete() 删除某一项

s.delete("a")

4、add()添加某个值

s.add(5)

5、has()查看是否包含某个值

s.has("a");

6、map对象

Map 需要注意的是:

Map是ES6提供的一种新的数据结构,类似与对象。

let arr =[
	["a",1],
	["b",2],
	["c",3]
]
let m = new Map(arr);
console.log(m);

Map 的属性和方法
1、clear();清空所有的值

m.clear()

2、delete(key) 删除某一项
3、get(key) 获取某一项值
4、has(key) 是否包含某一项值
5、set(key,val) 设置一个值

7、函数新增内容

1.箭头函数的基本语法

箭头函数最基本的写法: 形参=>返回值

let fn= nub => nub*2;
console.log(fn(10));//20

多个形参要加括号: (形参,形参)=>返回值

let fn = (nub,nub2)=>nub*nub2;
console.log(fn(10,3))//30

如果没有参数也要加括号:()=>返回值

let fn= ()=>'jiantouhanshu';
console.log(fn());//jiantouhanshu

如果后面不是返回值是执行语句
()=>{
执行语句
}

let fn =()=>{
    
    
 	console.log("天气不错");
 }
 fn()//天气不错
2.箭头函数没有arguments
let fn = ()=>{
    
    
	console.log(arguments);//报错
}
fn(1,2,3,4)

可以使用剩余参数获取箭头函数的参数

let fn= (..arg)=>{
    
    
	console.log(arg);
}
fn(1,2,3,4)//[1,2,3,4]
3.箭头函数的this问题

箭头函数本身没有this,调用箭头函数的this时,指向是其声明时所在作用域的this。

let fn;
let fn2 = function(){
    
    
	console.log(this);
	fn=()=>{
    
    
		console.log(this);
	}
}
fn2 = fn2.bind(document.body);
fn2();//body
fn();//body
4.函数参数默认值
let fn= (a=10,b=2)=>{
    
    
console.log(a*b);
}
fn();//20 如果没有传参数,那函数的默认值就是a等于10,b等于2

8、数组新增内容

1.Array.from(类数组)

把一个类数组转换成真正的数组(类数组:有下标有length)
返回值:转换之后的新数组

语法:Array.from(arrayLike[, mapFn[, thisArg]])
参数:arrLike :想要转换成数组的伪数组对象或可迭代对象。
mapFn:( 可选)如果制定了该参数,新数组中的每个元素会执行该回调函数。
thisArg:(可选)可选参数,执行回调函数mapFn时this对象。

<ul>
	<li>1</li>
	<li>2</li>
	<li>3</li>
</ul>
<script>
	{
    
    
		let lis =document.querySelectorAll("#list li");
		console.log(lis);//类数组
		lis = Array.from(lis);
	}
	{
    
    
		let lis =document.querySelectorAll("#list li");
		let arr =[];
		lis = Array.from(lis,function(item,index){
    
    
			console.log(item,index,this);
			return index;
		},arr);
		console.log(lis);	
	}
</script>
2.Array.of()创建数组

Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。
Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7) 创建一个具有单个元素 7 的数组,而 Array(7) 创建一个长度为7的空数组(注意:这是指一个有7个空位(empty)的数组,而不是由7个undefined组成的数组)。

Array.of(7);       // [7] 
Array.of(1, 2, 3); // [1, 2, 3]

Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]
3.Array.isArray() 检测数据是否是个数组

Array.isArray(data) 参数data要检测的数据,返回值 true 数组,false 非数组
index

9、数组的find和findIndex

arr.find() 查找数组中满足要求的第一个元素的值
Value arr.find(callback[,thisArg])
参数:callback 在数组每一项上执行的函数。element 当前遍历到的元素,index当前遍历到的索引,array 数组本身。
findIndex 和find用法一样,区别是findexIndex返回的不是具体值,而是索引。

10、数组扁平化

数组扁平化是指将一个多维数组变为一维数组

[1, [2, 3, [4, 5]]]  ------>    [1, 2, 3, 4, 5]

1、arr.flat
Array arr.flat([depth]) 扁平化多维数组
可选参数:depth 指定要提取嵌套数组的结构深度,默认值为1.
返回值:一个包含将数组与子数组中所有元素的新数组。

var arr = [
	["小明","18"],
	["小刚""18"],
	[
		[1,
			[3,4]
		]
	]
]
console.log(arr.flat());
console.log(arr.flat(2));
console.log(arr.flat(3));

使用Infinity 可以提取无线层,有多少层可以提取多少层

console.log(arr.flat(Infinity));

2、arr.flatMap
arr.flatMap(function callback(currentValue[,index,[,array]]){
//返回新数组的元素
}[,thisArg])
方法对原数组的每个成员执行一个函数,然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。但是flatMap()只能展开一层数据。

let arr =[
	["小明","18"],
	["小刚""18"]
];
let newArr = arr.flatMap((item)=>{
    
    
	item = item.filter((item,index)=>{
    
    
	return index==0;
	});
	return item;
})
console.log(newArr);

3、arr.fill
arr.fill(value[,start[,end]]); 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引
参数:用来填充数组元素的值。
可选参数:start 起始索引,默认值为0。 end 终止索引,默认值为arr.length

let arr=[0,1,2,3,4];
arr.fill("a",1,20);
console.log(arr);

4、arr.includes
arr.includes(valueToFind[,fromIndex]) 判断数组中是否包含一个指定的值。
参数:valueTofind 需要查找的值
可选参数 : 从fromIndex 处开始向后查找
返回值:true 代表数组中包含valueTofind ,false 代表数组中不包含从fromIndex后

let arr =["a","b","c","d","e"];
console.log(arr.includes("c",3));//false

11、字符串方法

JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。如果不存在返回-1,如果存在返回字符串的位置。ES6 又提供了三种新方法。
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

let str = '小猫和小狗是好朋友';
console.log(str.startsWith("小猫"));//true 
console.log(str.startsWidth("小猫"2));//false
console.log(str.endsWidth("好朋友"));//true
console.log(str.endsWidth("好朋友",2));//false 后面的参数是从前计算的第几位

repeat 方法返回一个新字符串,表示将原字符重复n次。

{
    
     let str ="a";
console.log(str.repeat(3));//aaa

12、模板字符串

let p =document.querySelector("p");
let name ="小明";
let age=18;
let school="初中";
p.innerHTML =`今年<strong>${
      
      name}</strong>就要<strong>${
      
      age>13?"保密":age}</strong>岁了,终于升入了<strong>${
      
      school}</strong>了`;

${} 插值表达式 {}里面可以插入任何js表达式,可以是一个对象、数组,甚至是一个函数。

13、对象新增方法

1、对象简洁表示法

let a = 0;
let b = 1;
//let obj ={
    
    
	//a:a,
	//b:b
//}
//简洁写法是
let obj ={
    
    
	a,
	b
}

2、属性名表达式

let name="小明";
let obj ={
    
    
	[name]:111
}

3、Object.assign对象合并
Object.assign(target,…sources) 将所有的可枚举属性的值从一个或多个源对象复制到目标对象
参数: target 目标对象 source源对象 返回值目标对象
4、Object.is
Object.is(value1,value2)判断两个值是否是相同的值。
在这里插入图片描述

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = {
    
     a: 1 };
var bar = {
    
     a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

Object.is(null, null);       // true

// 特例
Object.is(0, -0);            // false
Object.is(0, +0);            // true
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

14、Babel 是一个JavaScript编译器。

利用babel就可以让我们在当前的项目中随意的使用这些新最新的es6,甚至es7的语法。说白了就是把各种javascript千奇百怪的语言统统专为浏览器可以认识的语言。

猜你喜欢

转载自blog.csdn.net/literarygirl/article/details/103808744