参数start
数组片断开始处的数组下标。若是是负数,它声明从数组尾部开始算起的位置。 也就是说,-1指最后一个元素,-2指倒数第二个元素,以此类推。node
参数end
数组片断结束处的后一个元素的数组下标。若是没有指定这个参数 包含从start开始到数组结束的全部元素。若是这个参数是负数, 从数组尾部开始算起的元素。数组
返回值
一个新数组,包含从start到end(不包括该元素)指定的array元素。浏览器
描述
方法slice()将返回数组的一部分,或者说是一个子数组。返回的数组包含从start 开始到end之间的全部元素,可是不包括end所指的元素。若是没有指定end,返回的数组包含从start开始到原数组结尾的全部元素。服务器
var a = [1,2,3,4,5]; a.slice(0,3); // 返回 [1,2,3] a.slice(3); // 返回 [4,5] a.slice(1,-1); // 返回 [2,3,4]
注意:该方法并不修改数组。若是想删除数组中的一段元素,应该使用方法Array.splice。app
var len = items.length; var itemsCopy = []; var i; // bad for (i = 0; i < len; i++) { itemsCopy[i] = items[i]; } // good itemsCopy = items.slice();
var nodesArr = Array.prototype.slice.call(document.querySelectorAll("div")); // "true" array of DIVs // 获得一个由 div 元素组成的“真正的”数组 var argsArr = Array.prototype.slice.call(arguments); // changes arguments to "true" array // 把 arguments 转换成一个“真正的”数组
不只能够对简单类型的数组项进行排序,能够经过属性来排序对象。若是哪天服务器端发来一段 JSON 数据,并且其中的对象须要排序prototype
[ { name: "Robin Van PurseStrings", age: 30 }, { name: "Theo Walcott", age: 24 }, { name: "Bacary Sagna", age: 28 } ].sort(function(obj1, obj2) { // 实现增序排列:前者的 age 小于后者 return obj1.age - obj2.age; }); // Returns: // [ // { name: "Theo Walcott", age: 24 }, // { name: "Bacary Sagna", age: 28 }, // { name: "Robin Van PurseStrings", age: 30 } // ]
传对象只是传引用,咱们常常会试图 把一个数组清空,但实际上却错误地建立了一个新数组。code
var myArray = yourArray = [1, 2, 3]; // 囧 myArray = []; // `yourArray` 仍然是 [1, 2, 3] // 正确的方法是保持引用 myArray.length = 0; // `yourArray` 和 `myArray`(以及其它全部对这个数组的引用)都变成 [] 了
使用 push 方法来合并数组:对象
var mergeTo = [4,5,6]; var mergeFrom = [7,8,9]; Array.prototype.push.apply(mergeTo, mergeFrom); mergeTo; // is: [4, 5, 6, 7, 8, 9]
不少时候咱们会像下面这样来探测浏览器的某个特性:排序
if(navigator.geolocation) { // 在这里干点事情 }
固然这能够正常工做,但它并不必定有很好的效率。由于这个对象探测方法会在浏览器中初始化资源。在过去,上面的代码片段可能会在某些浏览器下致使内存泄露。更好、更快的方法是检查对象是否包含某个键名:ip
if("geolocation" in navigator) { // 在这里干点事情 }
键名检查十分简单,并且能够避免内存泄露。
let arr = ['orange', '2016', '2016']; arr.indexOf('orange'); //0 arr.indexOf('o'); //-1 arr.indexOf('2016'); //1 arr.indexOf(2016); //-1
arr.indexOf(‘orange') 输出 0 由于 ‘orange' 是数组的第 0 个元素,匹配到并返回下标。
arr.indexOf(‘o') 输出 -1 由于此方法不会在每个元素的基础上再次执行 indexOf 匹配。
arr.indexOf(‘2016') 输出 1 由于此方法从头匹配直到匹配到时返回第一个数组元素的下表,而不是返回所有匹配的下标。
arr.indexOf(2016) 输出 -1 注意:这里不会作隐式类型转换。
MDN上面的说明:
indexOf() compares searchElement to elements of the Array using
strict equality (the same method used by the === or triple-equals operator).
这里用的是严格等于(===)。作相似判断的时候多留意,数字不会转成字符串,同理字符串也不会转换成数字。