本文并没有详细列出Array方法详解,本文侧重点在于使用Array编程时候要注意的问题。
1.Array.concat

var o = {name:"Gavin"};
var a1 = [1,2,3];
var a2 = [6,o];
var arr1 = a1.concat(a2);
a1[0] = 0;
o.name = "GavinPan";
console.log(arr1);//[ 1, 2, 3, 6, {name:"GavinPan"} ] 

concat 将两个数组浅拷贝连接
2.Array.join

var o2 = {name:"Gavin"};
var arr2 = ['a', 1, o2];
var str2 = arr2.join('');
console.log(str2);//a1[object Object]

join 会把数组的每一项变成字符串,再把数组变成字符串。
在IE6、7的时代使用jion去连接大量字符串要优于使用+号,目前建议使用+号连接,参考《高性能网站进阶指南》中字符串优化
3. Array.pop Array.push
可以这样实现,只是提供一种思路
// Array.method('pop', function () {
//     return this.splice(this.length-1,1)[0];
// });
// Array.method('pop', function () {
//     this.splice.apply(
//         this, [this.length, 0].concat(Array.prototype.slice.apply(arguments))
//     );
//     return this.length;
// });
4. Array.reverse

var arr4 = [1,2,3];
var a4 = arr4.reverse();
arr4[2] = 'reverse';
console.log(arr4); //Array(3) [ 3, 2, "reverse" ]
console.log(a4); //Array(3) [ 3, 2, "reverse" ]

reverse 将数组翻转,返回数组本身。arr4 与 a4 是一个数组。
5. Array.shift
移除数组第一项,比Array.pop要慢的多
6.Array.slice(start, end)
对数组的一段做浅拷贝,end省略表示一直到最后
7.Array.sort
 数组排序,会把元素视为字符串,不靠谱,建议自己写。
8.Array.splice(index, count, item...)

var arr8 = [1,2,3];
var a8 = arr8.splice(1, 1,'a','b');
console.log(arr8); //[ 1, "a", "b", 3 ]
console.log(a8); //[ 2 ]

splice 从index索引位置删除count个数的项,返回数组删除项。如果item不为空将在index索引位置添加item项。注意不要混淆slice,slice是浅拷贝一段数组。
9.Array.unshif
//把元素添加到数组的第一项
// Array.method('unshif', function(){
//     this.splice.applay(this, [0 ,0].concat(Array.prototype.slice.apply(arguments)));
//     return this.length;
// });

Array.prototype.unshif1 = function(){
    console.log(`----`)
    console.log(Array.prototype.slice.apply(arguments));
    this.splice.apply(this, [0 ,0].concat(Array.prototype.slice.apply(arguments)));
    return this.length;
};

var arr9 = [1,2,3,4];
arr9.unshif1('a','b');
console.log(arr9)

有关slice填坑,w3cschool arrayObject.slice(start,end) start 必需,但是以下结果是对的。MND中给的答案正确 arr.slice([begin[, end]]),slice可以什么参数都不传。

var arrtest = [1,2,3];
var arrtest1 = arrtest.slice();
console.log(arrtest1);

扩展解释
Array.prototype.slice.apply(arguments),这么写的原因是,arguments 是类似数组的对象,他不是数组,所以不能使用数组的方法slice,通过apply去调用数组的slice方法,结果返回数组。
arr9.unshif1('a','b'); 可以看做 arr9.splice(0, 0, 'a', 'b');

javascript语言精粹数组篇之Array的方法注意事项的更多相关文章

  1. Javascript语言精粹之Array常用方法分析

    Javascript语言精粹之Array常用方法分析 1.Array常用方法分析 1.1 Array.prototype.sort() Javascript的默认比较函数假定被排序元素都是字符串,所以 ...

  2. JavaScript语言精粹 笔记04 数组

    数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...

  3. Javascript 语言精粹 代码片段合集

    Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...

  4. JavaScript 语言精粹笔记3

    方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...

  5. 《JavaScript语言精粹》小记

    一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...

  6. javascript语言精粹

    内容选自:<javascript语言精粹> 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'num ...

  7. 《JavaScript语言精粹》学习笔记

    一.in的用法 for...in 枚举一个对象的所有可枚举属性 检测DOM/BOM属性 if ("onclick" in elem) { // 元素支持onclick } if ( ...

  8. Javascript语言精粹之String常用方法分析

    Javascript语言精粹之String常用方法分析 1. String常用方法分析 1.1 String.prototype.slice() slice(start,end)方法复制string的 ...

  9. JavaScript语言精粹 笔记06 方法

    JS包含了少量可用在标准类型上的标准方法. ArrayFunctionNumberObjectRegExpString Array array.concat(item...) concat方法返回一个 ...

随机推荐

  1. 利用git 找到应该对问题代码负责的人--代码定责

    场景 有时候突然发现 某部分代码存在明显的问题,代码作者的态度需要调整. 或者发现某些代码存在特意留下的bug或漏洞,代码作者需要出来担责. 这时候我们就需要找出来 需要为有问题代码承担责任的同事,或 ...

  2. [P2216] [HAOI2007]理想的正方形 「单调队列」

    思路:用单调队列分别维护行与列. 具体实现方法:是先用单调队列对每一行的值维护,并将a[][]每个区间的最大值,最小值分别存在X[][]和x[][]中. 那么X[][]与x[][]所存储的分别是1×n ...

  3. java 第三章

       if  选择结构:        语法:if(条件){ //代码块1 } if——else选择结构 语法:if(条件){ //代码块1 }else{ //代码块2 } 多重if选择结构 语法:i ...

  4. 2.2.2python的BeautifulSoup库

    from bs4 import BeautifulSoupimport rebroken_html = '<ul class="country"><li>A ...

  5. .NET Core on K8S学习实践系列文章索引(Draft版)

    一.关于这个系列 自从去年(2018年)底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发 ...

  6. 工业物联网网关在线探测之TraceRoute

    佰马工业物联网网关BMG500在线探测通常有Ping.DNS.TraceRoute三种技术方式,这三种方式的区别与联系是什么?本文着重介绍工业物联网网关在线探测的工作原理,以图文形式介绍无线网关在线探 ...

  7. FB的新专利竟要监看使用者的脸

    大家应该会很好奇Facebook又在搞什么新花招,这个专利的名称是"Techniques for emotion detection and content delivery",其 ...

  8. CentOS 7.3下使用YUM 安装MySQL5.6

    1.检查Linux系统中是否已安装 MySQL rpm -qa | grep mysql 返回空值的话,就说明没有安装 MySQL 注意:在新版本的CentOS7中,默认的数据库已更新为了Mariad ...

  9. Unity经典游戏教程之:合金弹头

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  10. Netty服务端启动过程相关源码分析

    1.Netty 是怎么创建服务端Channel的呢? 我们在使用ServerBootstrap.bind(端口)方法时,最终调用其父类AbstractBootstrap中的doBind方法,相关源码如 ...