Array.prototype
Array.prototype 属性表示 Array 构造函数的原型,并允许您向所有Array对象添加新的属性和方法。
/*
如果JavaScript本身不提供 first() 方法,
添加一个返回数组的第一个元素的新方法。
*/
if(!Array.prototype.first) {
Array.prototype.first = function() {
console.log(`如果JavaScript本身不提供 first() 方法,
添加一个返回数组的第一个元素的新方法。`);
return this[0];
}
}
描述节
Array实例继承自 Array.prototype 。与所有构造函数一样,您可以更改构造函数的原型对象,以对所有 Array 实例进行更改。例如,可以添加新方法和属性以扩展所有Array对象。这用于 polyfilling, 例如。
鲜为人知的事实:Array.prototype 本身也是一个 Array。
Array.isArray(Array.prototype);
// true
Array.prototype 属性的属性特性: |
|
|---|---|
| writable | false |
| enumerable | false |
| configurable | false |
属性节
Array.prototype.constructor- 所有的数组实例都继承了这个属性,它的值就是
Array,表明了所有的数组都是由Array构造出来的。 Array.prototype.length- 上面说了,因为
Array.prototype也是个数组,所以它也有length属性,这个值为0,因为它是个空数组。
方法节
会改变自身的方法节
下面的这些方法会改变调用它们的对象自身的值:
Array.prototype.copyWithin()- 在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。
Array.prototype.fill()- 将数组中指定区间的所有元素的值,都替换成某个固定的值。
Array.prototype.pop()- 删除数组的最后一个元素,并返回这个元素。
Array.prototype.push()- 在数组的末尾增加一个或多个元素,并返回数组的新长度。
Array.prototype.reverse()- 颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。
Array.prototype.shift()- 删除数组的第一个元素,并返回这个元素。
Array.prototype.sort()- 对数组元素进行排序,并返回当前数组。
Array.prototype.splice()- 在任意的位置给数组添加或删除任意个元素。
Array.prototype.unshift()- 在数组的开头增加一个或多个元素,并返回数组的新长度。
不会改变自身的方法节
下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值。
Array.prototype.concat()- 返回一个由当前数组和其它若干个数组或者若干个非数组值组合而成的新数组。
Array.prototype.includes()- 判断当前数组是否包含某指定的值,如果是返回
true,否则返回false。 Array.prototype.join()- 连接所有数组元素组成一个字符串。
Array.prototype.slice()- 抽取当前数组中的一段元素组合成一个新数组。
Array.prototype.toSource()- 返回一个表示当前数组字面量的字符串。遮蔽了原型链上的
Object.prototype.toSource()方法。 Array.prototype.toString()- 返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的
Object.prototype.toString()方法。 Array.prototype.toLocaleString()- 返回一个由所有数组元素组合而成的本地化后的字符串。遮蔽了原型链上的
Object.prototype.toLocaleString()方法。 Array.prototype.indexOf()- 返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。
Array.prototype.lastIndexOf()- 返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。
遍历方法节
在下面的众多遍历方法中,有很多方法都需要指定一个回调函数作为参数。在每一个数组元素都分别执行完回调函数之前,数组的length属性会被缓存在某个地方,所以,如果你在回调函数中为当前数组添加了新的元素,那么那些新添加的元素是不会被遍历到的。此外,如果在回调函数中对当前数组进行了其它修改,比如改变某个元素的值或者删掉某个元素,那么随后的遍历操作可能会受到未预期的影响。总之,不要尝试在遍历过程中对原数组进行任何修改,虽然规范对这样的操作进行了详细的定义,但为了可读性和可维护性,请不要这样做。
Array.prototype.forEach()- 为数组中的每个元素执行一次回调函数。
Array.prototype.entries()- 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对。
Array.prototype.every()- 如果数组中的每个元素都满足测试函数,则返回
true,否则返回false。 Array.prototype.some()- 如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。
Array.prototype.filter()- 将所有在过滤函数中返回
true的数组元素放进一个新数组中并返回。 Array.prototype.find()- 找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回
undefined。 Array.prototype.findIndex()- 找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回
-1。 Array.prototype.keys()- 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。
Array.prototype.map()- 返回一个由回调函数的返回值组成的新数组。
Array.prototype.reduce()- 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。
Array.prototype.reduceRight()- 从右到左为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。
Array.prototype.values()- 返回一个数组迭代器对象,该迭代器会包含所有数组元素的值。
Array.prototype[@@iterator]()- 和上面的
values() 方法是同一个函数。
通用方法节
在 JavaScript 中,很多的数组方法被故意设计成是通用的。也就是说,那些看起来像是数组的对象(类数组对象),即拥有一个 length 属性,以及对应的索引属性(也就是数字类型的属性,比如 obj[5])的非数组对象也是可以调用那些数组方法的。其中一些数组方法,比如说 join 方法,它们只会单纯的读取当前对象的 length 属性和索引属性的值,并不会尝试去改变这些属性的值。而另外一些数组方法,比如说 reverse 方法,它们会尝试修改那些属性的值,因此,如果当前对象是个 String 对象,那么这些方法在执行时就会报错,因为字符串对象的 length 属性和索引属性都是只读的。
Array.prototype的更多相关文章
- [基础] Array.prototype.indexOf()查询方式
背景 最近在看Redux源码,createStore用于注册一个全局store,其内部维护一个Listeren数组,存放state变化时所有的响应函数. 其中store.subscribe(liste ...
- Array.prototype.filter()的实现
来源 今年某前端笔试的一道题,大概就是实现一遍filter,包括一个可以改变上下文的要求,其实就是改变this啦,跟原生的filter一样的功能跟参数. 解析 filter的功能就是过滤,传入一个函数 ...
- 【javascript 技巧】Array.prototype.slice的妙用
Array.prototype.slice的妙用 开门见山,关于Array 的slice的用法可以参考这里 http://www.w3school.com.cn/js/jsref_slice_arra ...
- Array.prototype.slice.call(arguments)
Array.prototype.slice.call(arguments)能够将具有length属性的对象转化为数组, 可以理解为将arguments转化成一个数组对象,让它具有slice方法 如: ...
- Array.prototype.sort()对数组对象排序的方法
Array.prototype.sort()方法接受一个参数——Function,Function会提供两个参数,分别是两个进行比较的元素,如果元素是String类型则通过Unicode code进行 ...
- IE下Array.prototype.slice.call(params,0)
i8 不支持 Array.prototype.slice.call(params,0) params可以是 HTMLCollection.类数组.string字符串
- (转)Array.prototype.slice.call自解
很多框架或者库里面都会有这句的使用,最多的还是通过Array.prototype.slice.call(arguments,0)把arguments这个伪数组转换为真正的数组.但为什么可以这么做,却一 ...
- 详解 Array.prototype.slice.call(arguments)
首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是 ...
- Array.prototype.indexOf
arr.indexOf(searchElement[, fromIndex = 0]) Array.prototype.indexOf()
- Array.prototype.slice && Array.prototype.splice 用法阐述
目的 对于这两个数组操作接口,由于不理解, 往往被误用, 或者不知道如何使用.本文尝试给出容易理解的阐述. 数组 什么是数组? 数组是一个基本的数据结构, 是一个在内存中依照线性方式组织元素的方式, ...
随机推荐
- [CSP-S模拟测试]:Cicada与排序(概率DP)
题目传送门(内部题93) 输入格式 第一行一个整数$n$,代表数列的长度. 接下来一行$n$个数$a_i$,用空格分隔开. 输出格式 输出一行$n$个数,表示原数列上这个位置在执行后的期望位置,注意输 ...
- git回滚操作
一,找到之前的版本历史纪录,确定要回滚到那个版本号:git log 二,回滚到这个版本:git reset --hard 72229f823c8b21cbe52142a944d74f1883fa41a ...
- Maven聚合和继承
一.建立以pom为packaging的项目为,然后再以这一个项目为parent project来聚合其他子项目 新建立一个以pom的项目 改写pom文件,依赖web-common,这样 ...
- vim字体设置
经过多方试验,在win下设置vim的大小终于成功了,备份如下, 现在把gvim7.1更改字体的方法记录如下,一段时间后,可能会失效,对他人造成困扰吧?!^_^ 在_vimrc中写:set guif ...
- Python基本语法_基本数据类型_序列类型详解
目录 目录 序列 序列的标准操作符 切片操作符 一个例子 字符串的连接 序列的功能函数 enumerate 枚举出序列对象的元素 len 获取序列对象的长度 min 取出sequence中的最小值 m ...
- linux/linux学习笔记-常用命令(mooc)
一.命令基本格式及文件处理命令 1.linux命令格式 简化选项用-表示,完整选项用--表示 注:linux通过权限位第1位(-:文件 / d:目录 / l:链接文件 来区分文件类型) 2.linux ...
- 【css】子元素浮动到了父元素外,父元素没有随子元素自适应高度,如何解决?
正常情况 如果子元素没有设置浮动(float),父元素的高度会随着子元素高度的改变而改变的. 设置浮动以后 父元素的高度不会随着子元素的高度而变化. 例如:在一个ul中定义若干个li,并设置float ...
- 文件压缩、解压工具类。文件压缩格式为zip
package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...
- linux sed 命令 实现对文件的增删改替换查 实验
1. 统一实验文本 # 创建包含下面内容的文件,后面的操作都会使用这个文件 [root@MongoDB ~]# cat person.txt ,mike,CEO ,jack,CTO ,yy,CFO , ...
- Java——LinkedList底层源码分析
1.简介 LinkedList 是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢.另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈 ...