JS粗读笔记(乱七八糟一锅炖版二)

Array 对象
不会改变数组本身的函数
  • valueOf方法返回数组本身。
  • toString方法返回数组的字符串形式。
var a = [1, 2, 3];a.toString() // "1,2,3"var a = [1, 2, 3, [4, 5, 6]];a.toString() // "1,2,3,4,5,6"

join()
join方法以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔
如果数组成员是 undefinednull或空位,会被转成空字符串。
[undefined, null].join('#')// '#'['a',, 'b'].join('-')// 'a--b'

通过 call 方法,这个方法也可以用于字符串和类似于数组的对象
concat()
concat方法用于多个数组的合并。它将新数组的成员,添加到原数组的 尾部,然后返回一个新数组,原数组不变。
除了接受数组作为参数, concat也可以接受其他类型的值作为参数。它们会作为新的元素,添加数组尾部。
如果不提供参数, concat方法返回当前数组的一个浅拷贝。
concat方法也可以用于将对象合并为数组,但是必须借助 call方法。
[].concat.call({a: 1}, {b: 2})// [{ a: 1 }, { b: 2 }][].concat.call({a: 1}, [2])// [{a: 1}, 2][2].concat({a: 1})// [2, {a: 1}]<strong>
</strong>

slice()
slice方法用于提取原数组的一部分,返回一个新数组,原数组不变。
它的第一个参数为起始位置(从0开始),第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。
如果 slice方法的参数是负数,则表示倒数计算的位置。
slice方法的一个重要应用,是将类似数组的对象转为真正的数组。
Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })// ['a', 'b']Array.prototype.slice.call(document.querySelectorAll("div"));Array.prototype.slice.call(arguments);

map()
map方法对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组。
map方法接受一个函数作为参数。该函数调用时, map方法会将其传入三个参数,分别是当前成员、当前位置和数组本身。
[1, 2, 3].map(function(elem, index, arr) {  return elem * index;});// [0, 2, 6]

上面代码中, map 方法的回调函数的三个参数之中, elem 为当前成员的值, index 为当前成员的位置, arr 为原数组( [1, 2, 3] )。 map 方法不仅可以用于数组,还可以用于字符串,用来遍历字符串的每个字符。但是,不能直接使用,而要通过函数的 call 方法间接使用,或者先将字符串转为数组,然后使用。
var upper = function (x) {  return x.toUpperCase();};[].map.call('abc', upper)// [ 'A', 'B', 'C' ]// 或者'abc'.split('').map(upper)// [ 'A', 'B', 'C' ]

map 方法还可以接受第二个参数,表示回调函数执行时 this 所指向的对象。
var arr = ['a', 'b', 'c'];[1, 2].map(function(e){  return this[e];}, arr)// ['b', 'c']

上面代码通过 map 方法的第二个参数,将回调函数内部的 this 对象,指向 arr 数组。
如果数组有空位, map方法的回调函数在这个位置不会执行,会跳过数组的空位(不会跳过null和undefined)。
forEach()
forEach方法与 map方法很相似,也是遍历数组的所有成员,执行某种操作,但是 forEach方法一般不返回值,只用来操作数据。如果需要有返回值,一般使用 map方法。
forEach方法的参数与 map方法一致,也是一个函数,数组的所有成员会依次执行该函数。它接受三个参数,分别是当前位置的值、当前位置的编号和整个数组。
forEach方法也可以接受第二个参数,用来绑定回调函数的 this关键字。
var out = [];[1, 2, 3].forEach(function(elem) {  this.push(elem * elem);}, out);out // [1, 4, 9]

forEach 方法无法中断执行,总是会将所有成员遍历完。如果希望符合某种条件时,就中断遍历,要使用 for 循环。
forEach方法不会跳过 undefinednull,但会跳过空位。
forEach方法也可以用于类似数组的对象和字符串。
filter()
filter方法的参数是一个函数,所有数组成员依次执行该函数,返回结果为 true的成员组成一个新数组返回。该方法不会改变原数组。
[1, 2, 3, 4, 5].filter(function (elem) { return (elem > 3);})// [4, 5]
上面代码将大于 3的原数组成员,作为一个新数组返回。
filter方法还可以接受第二个参数,指定测试函数所在的上下文对象(即 this对象)。
some(),every()
这两个方法类似“断言”(assert),用来判断数组成员是否符合某种条件。
它们接受一个函数作为参数,所有数组成员依次执行该函数,返回一个布尔值。该函数接受三个参数,依次是当前位置的成员、当前位置的序号和整个数组。
some方法是只要有一个数组成员的返回值是 true,则整个 some方法的返回值就是 true,否则 false
every方法则是所有数组成员的返回值都是 true,才返回 true,否则 false
注意,对于空数组, some方法返回 falseevery方法返回 true,回调函数都不会执行。
someevery方法还可以接受第二个参数,用来绑定函数中的 this关键字。
reduce(),reduceRight()
reduce方法和 reduceRight方法依次处理数组的每个成员,最终累计为一个值。
它们的差别是, reduce是从左到右处理(从第一个成员到最后一个成员), reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。
这两个方法的第一个参数都是一个函数。该函数接受以下四个参数。
  1. 累积变量,默认为数组的第一个成员
  2. 当前变量,默认为数组的第二个成员
  3. 当前位置(从0开始)
  4. 原数组
这四个参数之中,只有前两个是必须的,后两个则是可选的。
如果要对累积变量指定初值,可以把它放在 reduce方法和 reduceRight方法的第二个参数。
[1, 2, 3, 4, 5].reduce(function(x, y){  return x + y;}, 10);// 25

上面代码指定参数 x 的初值为10,所以数组从10开始累加,最终结果为25。注意,这时 y 是从数组的第一个成员开始遍历。
indexOf(),lastIndexOf()
indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回 -1
前者从左往右,后者从右向左
indexOf方法还可以接受第二个参数,表示搜索的开始位置。
注意,如果数组中包含 NaN,这两个方法不适用,即无法确定数组成员是否包含 NaN
会改变数组本身的函数 push()
push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
如果需要合并两个数组,可以这样写。
var a = [1, 2, 3];var b = [4, 5, 6];Array.prototype.push.apply(a, b)// 或者a.push.apply(a, b)// 上面两种写法等同于a.push(4, 5, 6)a // [1, 2, 3, 4, 5, 6]


push方法还可以用于向对象添加元素,添加后的对象变成类似数组的对象,即新加入元素的键对应数组的索引,并且对象有一个 length属性。
var a = {a: 1};[].push.call(a, 2);a // {a:1, 0:2, length: 1}[].push.call(a, [3]);a // {a:1, 0:2, 1:[3], length: 2}


pop()
pop方法用于删除数组的最后一个元素对空数组使用 pop方法,不会报错,而是返回 undefined
shift()
shift方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。
var a = ['a', 'b', 'c'];a.shift() // 'a'a // ['b', 'c']

unshift()
unshift方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
var a = ['a', 'b', 'c'];a.unshift('x'); // 4a // ['x', 'a', 'b', 'c']

reverse()
reverse方法用于颠倒数组中元素的顺序,返回改变后的数组。注意,该方法将改变原数组
splice()
splice方法用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
splice的第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
var a = ['a', 'b', 'c', 'd', 'e', 'f'];a.splice(4, 2) // ["e", "f"]a // ["a", "b", "c", "d"]

起始位置如果是负数,就表示从倒数位置开始删除。
如果只是单纯地插入元素, splice方法的第二个参数可以设为0。
var a = [1, 1, 1];a.splice(1, 0, 2) // []a // [1, 2, 1, 1]

如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。
var a = [1, 2, 3, 4];a.splice(2) // [3, 4]a // [1, 2]

sort()
sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。
数值会被先转成字符串,再按照字典顺序进行比较
[10111, 1101, 111].sort()// [10111, 1101, 111]



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值