17.Array.of()//可以把任意数据类型转化为数组
Array.from()可以将类数组的对象或者可遍历的对象转换成真正的数组
Array.of()没有要求有长度,但Array.from()可以放两个参数,第一个是要转变的对象,但此对象必须要有长度,是指完成前面的转换后做什么事情。
18.find()函数
函数作用:找出数组中符合条件的第一个元素。
fill()函数
函数作用:用指定的值,填充到数组。
上面的代码中第2个参数和第3个参数的意思是:从位置1的元素开始填充数字4,截止到位置3之前,所以是位置1和位置2的元素被数字4填充了,得到的结果:[1,4,4]。
entries( )函数
返回的一个遍历器,用for...of进行遍历,并打印出结果,能得到数组的键值:0和1,以及对应的数组元素:‘a‘和’b‘。
keys()函数
函数作用:对数组的索引键进行遍历,返回一个遍历器。
values()函数
作用:对数组的元素进行遍历,返回一个遍历器。
//检测数据类型方式: typeof instanceof constructor Object.prototype.toString.call()
19.Object.is()函数
函数的作用:比较两个值是否严格相等,或者说全等。
Object.assign()函数
函数作用:将源对象的属性赋值到目标对象上。
20.1.1 Object.getPrototypeOf()函数
函数作用:获取一个对象的prototype属性。
Object.setPrototypeOf()函数
函数作用:设置一个对象的prototype属性。
在person函数内,如果参数n没有传参,那么变量name得到的值就是“Zhangsan”,如果传参了,变量name的值就为参数n的值。
但是,前提是参数对应的布尔值不能false(比如:数字0,空字符串等转换成布尔值就是false),这就使得这种传统的实现方式存在一定的不足和缺陷。
ES6的写法:
看,我们把默认值的设定放在了参数上:(name = 'Zhangsan',age = 25),这样就实现了参数name的默认值为‘Zhangsan’,age的默认值为25。而不需要在函数体内进行检测,函数体内可以专注对参数的使用或者运算,再也不用担心函数的实际传参情况了。
如果函数有多个参数,但只有部分需要指定默认值,另一部分不需要的话,那么,设定默认值的参数一定要放在最后。看案例:
上面的person函数,两个参数name和age,其中只有age需要指定默认值,name不需要,那么,age的排序就必须放在最后,name放在前面。也就是有默认值的参数后面不能再跟不需默认值的参数了。
另外,只有当传入的参数为undefined,才会触发默认值赋值。否则,哪怕你传的参数值为0,false,null都不会触发默认值赋值,这就完美的解决了传统实现方式的弊端,试试看:
看person( )函数的4次调用和结果,只有不传或者传入undefined的时候才会触发默认值赋值,得到12,传入数字0或者null都不会触发默认值赋值。
还有一个要注意的地方,函数的参数是默认声明的,声明过的变量,就不能用let或者const关键字再次声明,否则会报错的,不信给你看一个案例:
上面这种情况,函数被调用后,就会报错,会提示你age已经被声明过了,你别再声明它了。
21.函数参数默认值:
默认值如果传递的是对象,则只有undefined,NaN和空可以触发默认值 其他情况传入值就是实际值
默认值如果传递的是变量,则只有undefined,空可以触发默认值 其他情况传入值就是实际值
22.rest函数
rest参数,这是一个新的概念,rest的中文意思是:剩下的部分。
...values;这是一种新的写法,也就是我们要介绍的rest参数,它代表的意思是:在实参中,除了第一个参数以外,剩余的参数都会被...values获取到。
在上面的案例中:sum(res,1,2,3,4),也就是除去实参 res 以外的参数,它们是1,2,3,4一共4个参数。它们全被...values收入囊中,接着,我们打印了values,看到的结果是一个数组:[1,2,3,4],也就是这4个参数被装在了一个数组中,我们想要使用这4个参数的话,就可以用数组的方法来对他们进行处理,所以我们用了forEach方法对它们进行了循环,并求和,把求和结果存储到了变量res中,最后我们打印出结果,得到了数字10,也就是数字1,2,3,4的求和结果。
rest参数的用法,首先是表示法:...values(三个点+变量名);其次,values是一个数组;
要注意的是,rest参数必须是函数的最后一个参数,后面不能再跟其他参数,什么意思呢?看案例:
上面有错误和正确的两种表示,在注释上有说明原因。总之rest参数后面不能再跟有其他参数。
rest参数并不是适合所有的函数使用,只在特定的情境下会比较适用,比方说刚刚案例中的求和函数,就十分适合要rest参数把实际的参数收集起来放在数组中进行求和,在适当的情况下使用它可以事半功倍,减少代码量,提高开发效率。
23.扩展运算符
上面讲到的rest参数,它的表示法使用...(三个点),它除了用在rest参数中,还有其他用途,我们称这种表示法为扩展运算符,那么,它还有什么作用呢?
它一般结合数组使用,把数组的元素用逗号分隔开来,组成一个序列。我们看一下实际案例:
上面的sum( )函数是简单的将两个数字相加求和,参数是两个普通的参数x,y,并不是什么高逼格的rest参数,所以我们运用了扩展运算符...将数组[ 2,3 ] 转成了 2,3 两个普通的数列,再传进sum( )方法,对应上x,y两个参数。实际上,sum( ...arr ) 的效果相当于sum( 2,3 ) 。
从这个案例我们就可以理解扩展运算符...的作用了,它可以将一个数组转成一个对应的参数数列。在实际开发中,你可以根据扩展运算符的作用,可以灵活运用,实现各种效果。
24. 箭头函数
箭头函数,这又是一个新概念,ES6给我们介绍一种全新的定义函数的方式,就是用箭头符号(=>),故得名为箭头函数。具体怎么用,我们来看案例:
如果传入的参数不止一个,或者函数体不是简单的返回a,需要做一些其他的运算,含有多条语句的话。如果参数超过1个的话,需要用小括号()括起来,函数体语句超过1条的时候,需要用大括号{ }括起来。
例如2个参数:
箭头函数优点:简化函数的实现,大大地减少代码量。