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 用法阐述
目的 对于这两个数组操作接口,由于不理解, 往往被误用, 或者不知道如何使用.本文尝试给出容易理解的阐述. 数组 什么是数组? 数组是一个基本的数据结构, 是一个在内存中依照线性方式组织元素的方式, ...
随机推荐
- html初体验#1
html的一些自见解 html 5 自带语义化,就是让标签带上感情色彩,方便人或浏览器区分 <b></b>与<strong></strong>的区别 & ...
- 关闭layer.open打开的页面
window.parent.location.reload(); //刷新父页面 var index = parent.layer.getFrameIndex(window.name); //获取窗口 ...
- heap和stack区别
转载自博客:https://www.cnblogs.com/perfy/archive/2012/09/06/2672946.html 1.heap是堆 ,stack是栈 2.stack的空间由操作系 ...
- 在vi vim中使用正则表达式与 普通perl正则的区别?
参考这篇文章很好 vim中的正则表达式常用的命令有种, 即搜索和替换 /: 搜索 :s 替换 在vim中的正则表达式和perl编程的正则表达式还是有区别的: 正则表达式中的内容包括: 字面字符... ...
- OpenStack Rally 质量评估与自动化测试利器
目录 文章目录 目录 问题描述 Rally 简介 应用场景 应用案例 Rally 安装 Rally 使用 Rally 架构 Rally Plugin 分析与实现 程序入口 执行 rally task ...
- spss中如何处理极端值、错误值
spss中如何处理极端值.错误值 spss中录入数据以后,第一步不是去分析数据,而是要检验数据是不是有录入错误的,是不是有不合常理的数据,今天我们要做一个描述性统计,进而查看哪些数据是不合理的.下面是 ...
- Linux的远程桌面折腾指南
因为实验服务器需要远程提供给研一童鞋使用,这两天折腾了一下Linux的远程桌面,在此记录总结一下.服务器系统为Lubuntu 16.04 远程登录到Linux 方案一:简单使用--x11vnc 单用户 ...
- 阿里云 centos 部署 Django 可能遇到的问题
问题一:版本限制 File "/Users/icourt/Desktop/hf/venv/lib/python3.7/site-packages/django/db/backends/m ...
- linux下搭建mysql数据库
linux下搭建mysql数据库 1.下载mysql: http://dev.mysql.com/downloads/mysql/5.6.html#downloads wget http://dev. ...
- 【SQL系列】从SQL语言的分类谈COMMIT和ROLLBACK的用法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]从SQL语言的分类谈COMMIT和 ...