数据类型new与不new的区别
伪数组
数组api
查看Array对象公共属性
基本数据类型new不new的区别
new String(x)和String(x)的区别
|
|
new Number(x)和Number(x)的区别
|
|
复杂数据类型new不new的区别
new OBject(x)和Object(x)的区别【没区别】
数组Array
|
|
|
|
函数Function
|
|
总结 new不new的区别
基本数据类型不加new 则返回基本类型
1String(1) // '1'基本数据类型加new 则返回一个对象
1new Number('123') //Number {123} 变成Number对象复杂数据类型加不加new都一样
12Object('sss') // String {"sss"} 传入字符串则变成String对象new Object('sss') // String {"sss"}
伪数组
- arguments 对象是伪数组
- document.querySelectAll(‘div’) 返回的对象是伪数组
上面两个有以下这些特征:
1.有 0:xx,1:xx,2:xx,3:xx…n:xx,length:xx 这些 key 的对象
2.他们的proto不链接到数组的公用属性Array.prototype,即他们的原型链中没有Array.prototype
这样的对象就是伪数组
instanceof判断是不是数组
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
换句话说,instanceof用来测试一个对象的proto是否指向构造函数(Array,Function,Object等)的共有属性(prototype)
数组的操作(api)
- 数组就是数据的有序集合
- 数组就是原型链中有
Array.prototype
的对象
遍历数组获取value和index用forEach
arr.forEach(function (value,index) {执行函数体/return 返回值});
forEach
只用来操作数据,没有return返回值map
可以有返回值
forEach
的用法与map
方法一致,接受三个参数:value、index、整个数组。
forEach
的原理:
排序sort
- sort用的快速排序
默认的sort会将数字先转成字符串,再按照字典顺序进行从小到大排序,所以会有bug
1234567891011['d', 'c', 'b', 'a'].sort()// ['a', 'b', 'c', 'd'][4, 3, 2, 1].sort()// [1, 2, 3, 4][11, 101].sort()// [101, 11] 先比较最前面的数,都是1,再比较第二位数,js误以为101小于11[10111, 1101, 111].sort()// [10111, 1101, 111] 先比较最前面的数,都是1;再依次比较后几位数,有bug如果想让sort方法按照自定义方式排序,可以传入一个函数作为参数。
123456789101112从小到大排序a-b[10111, 1101, 111].sort(function (a, b) {return a - b;})// [111, 1101, 10111]--------从大到小排序b-a[10111, 1101, 111].sort(function (a, b) {return b - a;})[10111, 1101, 111]根据给定的依据进行排序
1234567891011var students = ['小明','小红','小花'];var scores = { 小明: 59, 小红: 99, 小花: 80 };students.sort(function(a,b) {return scores[a]-scores[b]; //按照scores从小到大排序});//["小明", "小花", "小红"]students.sort(function(a,b) {return scores[b]-scores[a];//按照scores从大到小排序});//["小红", "小花", "小明"]
|
|
join 数组变字符串
join
方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。
数组变字符串更简单的办法:
cancat连接多个数组
concat
方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。
concot
用来复制一个数组,由于concat
返回的是一个新数组,因此虽然复制原数组,但两者不相等
数组相加
数组的相加,先将每个数组转变成字符串,然后连接起来
map
map
方法将数组的所有value依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。原数组不变forEach
没有返回值,map
有返回值
map
有三个参数:value、index和数组本身。
用箭头函数=>
可以简写为:
map
方法还可以返回包含对象的数组
filter筛选出
filter
方法对数组中的每一项进行筛选出,满足条件的value组成一个新数组返回。
它的参数是一个函数,所有数组value依次执行该函数,返回结果为true的value组成一个新数组返回。
该方法不会改变原数组。
|
|
filter
方法可以接受三个参数:value,index和整个数组。
过滤falsy值
先filter过滤再用map操作
|
|
压缩累计reduce,reduceRight
reduce
方法和reduceRight
方法依次处理数组的每个value,最终压缩累计为一个值。它们的差别是,reduce是从左到右处理(从第一个value到最后一个value),reduceRight则是从右到左(从最后一个value到第一个value),其他完全一样。
用reduce
方法可以可以简化用for循环来累计的运算(比如求数组之和)
用箭头函数=>
简化:
reduce
可以设置初始值
计算所有奇数之和:
reduce替代map
设置初始值为空数组[]
reduce替代filter
设置初始值为空数组[]
数组中是否含有某个值
顺带一提,字符串用str.indexOf(value)
来判断是否含有某个字符
arr.includes()
语法:arr.includes(value [,startIndex])
Jquery的$.inArray()
方法
语法:$.inArray( value, array [, startIndex ] )
every()
arr.every((item,index) => {}) 方法用于检测数组所有元素是否都符合指定条件,所有符合则返回true,只要有一个不符合就返回false
|
|
some()
some() 方法用于检测数组中的元素其中1个是否有满足指定条件,只要有一个元素满足条件,则表达式返回true
|
|
find()
返回数组中符合条件的第一个元素的值,如果没有符合条件的元素则返回 undefined
findIndex()
返回数组中符合条件的第一个元素的位置,如果没有则返回-1
删除具体某个值
|
|