ES6

let

ES6 新增了let命令,用来声明变量。

  • 它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
  • let命令不存在变量提升,它所声明的变量一定要在声明后使用,否则报错。
  • let不允许在相同作用域内,重复声明同一个变量。
  • 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
var a=2;
{
   var a=3;
}
console.log(a);  //3
var a=2;
{
   let a=3;
}
console.log(a);  //2

 const

  • const声明一个只读的常量。常量的值就不能改变。
  • const一旦声明变量,就必须立即初始化,不能留到以后赋值。
  • const只在声明所在的块级作用域内有效.
  • const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
  • const声明的常量,不可重复声明

数组解构

数组解构时,等号左边和等号右边的形式要统一,如果不统一解构将失败。

let  [a,b,c]=[1,2,3];

undefined和null的区别 

let [a,b="B"]=['技术',undefined];
console.log(a+b); //技术 B
let [a,b="B"]=['技术',null];
console.log(a+b); //技术 null

Array.from()

这就是一个标准的JSON数组格式,跟普通的JSON对比是在最后多了一个length属性。只要是这种特殊的json格式都可以轻松使用ES6的语法转变成数组,还有可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)

let arr = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};
let arr1=Array.from(arr)  //["a","b","c"]

Array.of() 

用于将一组值,转换为数组,

let arr=Array.of(1,2,3)
console.log(arr)  //[1,2,3]

 Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于 2 个时,Array()才会返回由参数组成的新数组

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]

find() 

所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined

  • value:当前查找的值

  • index:当前的位置

  • arr:原数组

[1, 5, 10, 15].find(function(value, index, arr) {
  return value > 9;
}) // 10

fill()

方法使用给定值,填充一个数组。

  • 第一个参数:填充的变量

  • 第二个参数:开始填充的位置

  • 第三个参数:填充结束位置

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

 entries()

entries()实例方式生成的是Iterator形式的数组,那这种形式的好处就是可以让我们在需要时用next()手动跳转到下一个值。

let obj = ['red', 'green', 'blue']
let arr=obj.entries();
console.log(arr.next().value)  //[0, "red"]
console.log(arr.next().value)  //[1, "green"]
console.log(arr.next().value)  //[2, "blue"]

 对象的解构赋值

对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"

第二个例子的变量没有对应的同名属性,导致取不到值,最后等于undefined。 

let { foo, bar } = { foo: 'aaa', boo: 'bbb' };
console.log(foo , bar) // aaa undefined

 如果在解构之前就定义了变量,代码如下

let foo;
({foo} ={foo:'JSPang'});
console.log(foo); //控制台输出jspang

对象扩展运算符

//对于一个方法传入参数不确定
function a(...arg){
	console.log(arg[0])
	console.log(arg[1])
	console.log(arg[2])
	
}
a(1,2)  //1 2 undefined
// 解决数组赋值只是堆栈引用问题
let arr1=['www','baidu','com'];
//let arr2=arr1;
let arr2=[...arr1];
console.log(arr2);
arr2.push('hh');
console.log(arr2); //["www", "baidu", "com", "hh"]
console.log(arr1); //["www", "baidu", "com"]

 Object.is()

比较两个值是否相等

//同值相等
console.log(+0 === -0);  //true
console.log(NaN === NaN ); //false
//严格相等
console.log(Object.is(+0,-0)); //false
console.log(Object.is(NaN,NaN)); //true

Object.assign( )

操作数组时我们经常使用数组合并,那对象也有合并方法,那就是assgin( )。

var a={a:'hello'};
var b={b:'world'};
var c={c:'web'};

let d=Object.assign(a,b,c)
console.log(d); //{a: "hello", b: "world", c: "web"}

in用法 

//对象判断
let obj={
    a:'hello',
    b:'world'
}
console.log('a' in obj);  //true

//数组判断
//这里的0指的是数组下标位置是否为空
let arr=[,,,,,];
console.log(0 in arr); //false

let arr1=['jspang','技术胖'];
console.log(0 in arr1);  // true

字符串解构

const [a,b,c,d,e]="Hello"
console.log(a) //H
console.log(b) //e
console.log(c) //l
console.log(d) //l
console.log(e) //o

模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

上面代码中的模板字符串,都是用反引号表示。如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。

所有模板字符串的空格和换行,都是被保留的.支持html标签,对运算的支持

let b='abc';
let a=`cccc${b}`;
console.log(a)  //ccccabc

set数据结构 

Set本身是一个构造函数,用来生成 Set 数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值。 

/*通过add追加数据*/
	let arr=new Set([1,2,3]);
	arr.add(4);
	console.log(arr)
//{1,2,3,4}
 /*通过delete删除数据*/
	let arr=new Set([1,2,3]);
	arr.delete(3);
	console.log(arr)
//{1,2}
 /*通过has查找数据,返回true,false*/
	let arr=new Set([1,2,3]);
	arr.has(3);
	console.log(arr.has(3))
//true
 /*通过clear删除全部数据*/
	let arr=new Set([1,2,3]);
	arr.clear();
	console.log(arr)
//{}
 /*通过size输出数量*/
	let arr=new Set([1,2,3]);
	console.log(arr.size)
//3

 Array.from方法可以将 Set 结构转为数组,提供了去除数组重复成员的另一种方法。

 /*实现数组去重*/
	function getArr(array){
		return  Array.from(new Set(array))
	}
    getArr([1,1,3,3,4,5])

WeakSet 

成员只能是对象,没有size属性,没有办法遍历它的成员

    let json=new WeakSet();
	let obj={a:'111'}
	let  obj1=obj;
	json.add(obj);
	json.add(obj1);
	console.log(json)
const ws = new WeakSet();
const obj = {};
const foo = {};

ws.add(window);
ws.add(obj);

ws.has(window); // true
ws.has(foo);    // false

ws.delete(window);
ws.has(window);    // false

map

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。

const m = new Map();
const o = {p: 'Hello World'};

m.set(o, 'content')
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false
// 增加set
map.set(json,'hello');

// 取值get
console.log(map.get(json));

// 删除delete
map.delete(json);
console.log(map)

// size取长度
console.log(map.size);

// has查找
console.log(map.has('hello'))

// clear清空
map.clear()

箭头函数

箭头函数没有prototype(原型),所以箭头函数本身没有this

①箭头函数写代码拥有更加简洁的语法;
②不会绑定this,或者说箭头函数中 不会改变this本来的绑定。

 

 

 

 

 

 

 

 

你可能感兴趣的:(js)