1.数据类型:symbol代表的是独一无二的值,主要解决命名冲突的问题。
比如当我们想用他人提供的对象时,想在这个对象中添加新的方法或属性,就需要给新的方法和属性起一个名字,由于名字是字符串的就可能与已有的名字发生冲突,这时候就可以使用symbol避免这种冲突的产生。
symbol是基础类型,创建一个新的值采用的是symbol()函数创建,他的参数可以是一个字符串类型的参数,一般用symbol.description可以取到参数的值。
在对象中创建symbol类型的属性:
let obj={
name:'admin',
[symbol('age')]=18,
tall:180
}
使用该方法创建的属性是独一无二的,但是Object.keys() Object.getOwnPropertyNames() for...of... for...in...也是无法取到相应的值的。只能通过Object.getOwnPropertySymbols()才能获取。
2.函数:可以给函数的形参一个默认值
3.遍历数组/对象的方法:for...of for...in
数组新增的方法
(1)Array.from():可以将类数组或者任何有length属性的对象转换为数组的形式
let obj={
0:'zhangsan',
'1':'class01',
length:2
}
let arrObj = Array.from(obj)//['zhangsan', 'class01']
(2)Array.of():可以将其参数转换为数组中的第一个元素。
let arr = Array.of(3) //[3]
let arr1= new Array(3) //[empty*3]
(3)find():参数为一个函数,返回的为满足条件的第一个元素
(4)findIndex():参数为一个函数,返回的是满足条件的第一个元素索引
(5)reduce():有两个参数callback和initialValue,第一个参数包括:previousValue(上一次回调函数的值或者是初始值);currentValue(当前元素的值);index(当前元素的索引);arr(调用reduce的数组);reduce一般用于求和/求平均数/求积;它和map、forEach、filter一样会遍历数组中的每个元素。第二个参数initialValue一般是给定函数的初始值
(6)fill:填充,可以给数组填充一个数值。一般包含三个参数:value(需要填充的值);startIndex(开始填充的索引位置);endIndex(结束填充的索引位置) 这个方法会改变原数组。
字符串新增的方法:
(7)includes ():第一个参数为目标值(必选);第二个参数为开始的位置(可选,默认为0);返回值为true或false。与indexOf的区别是:indexof是强对比,会造成对NaN的误判。
[1,2,3,NaN].includes(NaN) //true
(8)copyWithin:第一个参数为开始替换数据的索引位置;第二个参数为开始读取数据的索引位置(可选);第三个参数为结束读取数据的索引位置(可选)
4.扩展运算符(解构赋值):可以将数组或对象展开
5.块级作用域const、let :
6.class类:有一个构造器函数,必须使用new创建实例对象,不然会报错。类中所有的属性和方法都会被实例对象继承,如果不想被继承,可以采用static关键字,这个方法就会变成静态方法就不能被实例对象继承了。