1、Symbol
Symbol是ES6新增的基本数据,它是一个内置全局函数,生成一个独一无二的数据
let a=Symbol(20)
let b=Symbol(20)
console.log(a,b,a==b) //Symbol(20) Symbol(20) false
2、Map
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值,Map没有语法糖
Map与Object相似,但也是有区别的:
(1)一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
(2)Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
(3)Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
(4)Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
var a=["well"]
var myMap = new Map([["name", "Li"], ["age", 20], ["addr", "重庆"],[a,99]]);
//get获取
console.log(myMap.get("name")) //Li
console.log(myMap.get("addr")) //重庆
//set更新
var re1=myMap.set("life","good")
console.log(myMap) //Map(5) {'name' => 'Li', 'age' => 20, 'addr' => '重庆', Array(1) => 99, 'life' => 'good'}
var re2=myMap.set("name","Yu")
console.log(myMap) //Map(5) {'name' => 'Yu', 'age' => 20, 'addr' => '重庆', Array(1) => 99, 'life' => 'good'}
//delete删除
var re3=myMap.delete(a)
console.log(myMap) //Map(4) {'name' => 'Yu', 'age' => 20, 'addr' => '重庆', 'life' => 'good'}
var re4=myMap.delete("well")
console.log(myMap) //Map(4) {'name' => 'Yu', 'age' => 20, 'addr' => '重庆', 'life' => 'good'}
//clear清空
var re5=myMap.clear()
console.log(myMap) //Map(0) {size: 0}
对Map进行遍历
var myMap=new Map([["a",1],["b",2]])
for(var key of myMap.keys()){
console.log(key) //a b
}
for(var [key,value] of myMap){
console.log(key+"="+value) //a=1 b=2
}
myMap.forEach(function(key,value){
console.log(key+"="+value) //1=a 2=b
})
Map转数组(必须是二维数组):Array.from()静态方法
var arr = [["name1", "YU"],["name2", "Yi"]];
var myMap = new Map(arr);
console.log(myMap) //Map(2) {'name1' => 'YU', 'name2' => 'Yi'}
// Map构造函数可以将一个二维键值对数组转换成一个Map对象
var newarr=Array.from(myMap)
console.log(newarr)
3、Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
var arr=[12,23,23]
var a=new Set(arr) //遍历的数组 然后把数组的元素们调用a.add添加进集合中
var arr2=Array.from(a) //取出了数据容器中的所有数据 然后存入新数组返回值
console.log(arr2) //[12,23]
a.add(10)
a.add(10)
a.add("aaa")
a.add([99])
a.add([99])
console.log(a) //{12, 23, 10, 'aaa', [99] , [99]}
a.forEach(function(el){
console.log(el) //12 23 10 aaa [99] [99]
})
剩余运算符 ...
var arr=[11,22,11,{}]
var arr2=[...arr] //把arr的元素全部取出 然后存入新数组arr2中
console.log(arr,arr2,arr==arr2,arr[3]==arr2[3])
//[11,22,11,{}] [11,22,11,{}] false true
数组去重
var mySet=new Set([11,22,33,99,99,11])
var a=[...mySet]
console.log(a) //[11,22,33,99]
并集
var arr=[11,22,11,{}]
var arr2=[10,20,30,10]
var a1=new Set([...arr,...arr2])
console.log(a1) //{11,22,{},10,20,30}
交集
var arr = [10,6,9,{}]
var arr2 = [10,20,30,10,9]
var a2 = new Set(arr.filter(function(el) {
if (arr2.includes(el)) {
return el
}
}))
console.log(a2) //{10,9}
4、字符串
(1)includes():返回布尔值,判断是否找到参数字符串。
var str="hello, world"
var re1=str.includes("hel")
var re2=str.includes(" ")
var re3=str.includes("")
console.log(re1,re2,re3) //true,true,true
(2)startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。
endsWith():返回布尔值,判断参数字符串是否在原字符串的尾部。
var str="61434030281"
var str2=str.startsWith("61",0) //从下标为0的数是否以61开始
var str3=str.endsWith("3028",10) //到下标为10的数是否以3028结尾
console.log(str2,str3) //true,true
(3)repeat():返回新的字符串,表示将字符串重复指定次数返回。
var str="愿望交换商店"
var str2=str.repeat(3)
console.log(str2) //愿望交换商店愿望交换商店愿望交换商店
var str="愿望交换商店"
var str2="*".repeat(str.length)
console.log(str2) //******
(4)padStart:返回新的字符串,表示用参数字符串从头部补全原字符串。
padEnd:返回新的字符串,表示用参数字符串从尾部补全原字符串。
var str="99"
var str2=str.padEnd(8,"126a")
var str3=str.padStart(9,"9876y")
console.log(str2,str3) //99126a12,9876y9899
5、数组
Array.of():将参数中所有值作为元素形成数组。
console.log(Array.of(null,33,"good",99)) //[null,33,"good",99]
Array.from():将类数组对象或可迭代对象转化为数组。
var myMap=new Map()
myMap.set("a1","b1")
myMap.set("a2","b2")
console.log(Array.from(myMap)) //[["a1","b1"],["a2","b2"]]
var arr=[1,2,3]
var set=new Set(arr)
console.log(Array.from(set)) //[1,2,3]
var str="abc"
console.log(Array.from(str)) //["a","b","c"]
find():查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。
var arr=[11,22,33,44,10,9]
var re=arr.find(function(el){
console.log(999) //两遍999
if(el>20){
return true
}})
console.log(re) //22
findIndex():查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。
var arr=[9,80,66,45]
var re=arr.findIndex(function(el){
if(el>18){
return true
}})
console.log(re) //1
fill():将一定范围索引的数组元素内容填充为单个指定的值
var arr=[99,88,23,9,5,13]
var arr2=arr.fill("aaa",2,4) //索引2和3 [2,4)
console.log(arr,arr2) //[99, 88, 'aaa', 'aaa', 5, 13] [99, 88, 'aaa', 'aaa', 5, 13]
includes():数组是否包含指定值。注意:与 Set 和 Map 的 has 方法区分;Set 的 has 方法用于查找值;Map 的 has 方法用于查找键名。
var arr=[1,2,5,"thanks"]
var re=arr.includes("thanks")
console.log(re) //true
flat():嵌套数组转一维数组
var arr=[["hello","world"],40,50,[[67,71],"你好",[90,[110],100]]]
var arr2=arr.flat(3)
console.log(arr2) // ['hello', 'world', 40, 50, 67, 71, '你好', 90, 110, 100]
6、对象
es6的对象成员可以写做 一个单词 这个单词是变量名:把变量名作为对象的属性名 值取出作为属性值(易于读取,提高开发效果)
var count=20
var obj={count:count}
console.log(obj) //{count:20}
方法简写: 函数根据业务有很多别称:构造函数 静态函数 方法 事件处理程序(监听器) 闭包 回调函数 钩子函数
var obj={
name:"He",
say:funnction(){}
}
//简写为:
var obj={
name:"He",
say(){}
}
var obj = {
name: "YU", //常用写法
"age": 20, //标准写法
["hello"]: "think", //es6写法
[true]: 18, //es6写法
[{good: 100}]: 66, //es6写法
[Symbol(100)]: 99
}
console.log(obj)