javascript语言精粹数组篇之Array的方法注意事项
本文并没有详细列出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的方法注意事项的更多相关文章
- Javascript语言精粹之Array常用方法分析
Javascript语言精粹之Array常用方法分析 1.Array常用方法分析 1.1 Array.prototype.sort() Javascript的默认比较函数假定被排序元素都是字符串,所以 ...
- JavaScript语言精粹 笔记04 数组
数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...
- Javascript 语言精粹 代码片段合集
Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...
- JavaScript 语言精粹笔记3
方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...
- 《JavaScript语言精粹》小记
一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...
- javascript语言精粹
内容选自:<javascript语言精粹> 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'num ...
- 《JavaScript语言精粹》学习笔记
一.in的用法 for...in 枚举一个对象的所有可枚举属性 检测DOM/BOM属性 if ("onclick" in elem) { // 元素支持onclick } if ( ...
- Javascript语言精粹之String常用方法分析
Javascript语言精粹之String常用方法分析 1. String常用方法分析 1.1 String.prototype.slice() slice(start,end)方法复制string的 ...
- JavaScript语言精粹 笔记06 方法
JS包含了少量可用在标准类型上的标准方法. ArrayFunctionNumberObjectRegExpString Array array.concat(item...) concat方法返回一个 ...
随机推荐
- python带有GIL解释器锁
1.GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定. 2.每个CPU在同一时间只能执行一个线程(在 ...
- Liunx环境下配置matplotlib库使用中文绘图
最近在使用matplotlib库的过程中需要用到中文绘图,在网上找了好多种方法,最终用一种方法解决了,在此记录. 首先Linux是有自己的中文字体的,叫做"Droid Sans Fallba ...
- 抓取崩溃的log日志
1.下载adb工具包 也就是解锁软件,如果要解锁的话,需确认有fastboot 安装jdk.sdk 2.注意事项 请确保电脑上只连接了一台手机设备(最好只连接一条USB线),同时确保手机已开启USB调 ...
- 转载 vue-awesome-swiper - 基于vue实现h5滑动翻页效果
说到h5的翻页,很定第一时间想到的是swiper.但是我当时想到的却是,vue里边怎么用swiper?! 中国有句古话叫:天塌下来有个高的顶着. 在前端圈里,总有前仆后继的仁人志士相继挥洒着热汗(这里 ...
- lvs+keepalived 高可用及负载均衡
一.环境准备 VIP:10.18.43.30 dr1:10.18.43.10 dr2:10.18.43.20 web1:10.18.43.13 web2:10.18.43.14 结构图 (一).预处理 ...
- 后端基于方法的权限控制--Spirng-Security
后端基于方法的权限控制--Spirng-Security 默认情况下, Spring Security 并不启用方法级的安全管控. 启用方法级的管控后, 可以针对不同的方法通过注解设置不同的访问条件: ...
- luogu1373_小a和uim之大逃离 多维dp
传送门 巧妙之处在于dp的设计只用设计差值即可,因此不会mle,枚举的顺序问题也解决了 #include <bits/stdc++.h> using namespace std; #def ...
- springMVC(一) --前端控制器(DispatcherServlet)的作用
SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户 ...
- java多线程基础(一)--sleep和wait的区别
sleep和wait的区别有: 1.这两个方法来自不同的类分别是Thread和Object: 2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得线程可以使用同步控制块或者方法: 3.w ...
- 线性分类 Linear Classification
软分类:y 的取值只有正负两个离散值,例如 {0, 1} 硬分类:y 是正负两类区间中的连续值,例如 [0, 1] 一.感知机 主要思想:分错的样本数越少越好 用指示函数统计分错的样本数作为损失函数, ...