Js 数组(一):基础应用
(一) Js 数据类型
分为基本数据类型以及引用类型
基本数据类型有 null,undefined,Boolen,Number,String,还有一种复杂数据类型 Object。
var var1 = "xianrongbin", var2 = false, var3 = null, var4 = undefined, var5 = 123;
console.log(typeof var4); var var6 = [1, 23, 5];
console.log(typeof var6);
这里,其实只需一个var的,为了区别基本数据类型与复杂数据类型,写了两个var 关键字。
将所有的变量定义在一个var后面,有益提升程序运行效率。
如果在一个函数中,不标注 var,则该变量是全局变量,是window的变量,因为所有全局变量都是由window承担的。
function testVar() {
num = 1;
}
testVar();
console.log(window.num);
这里输出1,如果在 "num" 前加上var,输出则会报错。
基本数据类型与值类型,一个是传值,一个是改变地址。
var var6 = [1, 23, 5];
function changeValue(obj) {
obj.pop();
}; changeValue(var6);
console.log(var6); var num = 1;
function changeNum(num) {
num = num + 1;
};
console.log(num);
代码
输出的值是 [1,23] 1。 这点很重要。 这里于C#有很大的不同。
(二) 数组操作
数组类型是Object,数组是值得有序集合。
每个值叫做元素,每个元素在数组中都有数字位置的编号,即索引。
数组是弱类型的,数组中可以含有不同类型的元素。
var arr=[1,'2',[1,2],null]
数组中允许最后面有一个多余的 ‘,’,
var arr1=[,,] --undefined,undefined
1、数组最大长度
最大长度是 2^23-1
2、创建数组
var arr=new Array();
var arrWidthLength=new Array(1000);
var arrLikesLiteral=new Array(1,2,3);
--new 其实是可以省略的
3、数组元素的增删
数组是动态的,无需指定大小
arr[arr.length] --尾部添加一个元素
arr.length-=1 --删除尾部元素
若要 往数组尾添加一个或多个元素,可用push(),
删除最后一个元素,可用pop(),
删除数组头一个元素,可用shif(),
delete arr[2] --第三个元素索引不存在,仍然会存在这个位置,值为undefined
向数组头添加一个或多个元素,可使用unshift,
var testArry = [1, 2, 3, 4, 5, 6];
testArry.push(7); testArry.pop(); testArry.shift(); testArry.unshift('unshift1', 'unshift2'); concatArry= testArry.concat('concat1'); var index = testArry.indexOf('concat1');
testArry.splice(index, 1); testArry.splice(0, 1, 'replace1','replace2');
Array操作基本函数
结果是: ["replace1", "replace2", "unshift2", 2, 3, 4, 5]
4.数组迭代
我们可以使用
for(i in arr) { console.log(arr[i]);
如果我们在数组的prototype添加属性a=‘testa',则输出时也会输出 testa
因此需要判断 if(arr.hasOwnProperty(i)) { }
5.稀疏数组
稀疏数组并不含有从0开始的连续索引,一般length属性值比实际元素个数大。
var arr1=[undefined];
var arr2=new Array(1);
0 in arr1;---true 0 in arr2; ---false
arr1.length=100; arr1[99]=123; 99 in arr1; --true 98 in arr1; --false
6.五个迭代函数
这五个迭代函数是.every .some .filter .forEach .map他们都有三个参数(item,key,value),key是从0开始计数,后两个参数可选用。
. every() 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true
. some() 对数组中的每一项运行给定的函数,如果该函数对任意一项返回true,则返回true
. filter() 对数组中的每一项运行给定的函数,返回该函数返回true的项组成的数组,不会影响原函数
. forEach() 对数组中的每一项运行给定的函数,这个方法没有返回值
. map() 对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组,不会影响原函数
用法如下
var testArry = [1, 2, 3, 4, 5, 6];
var isAllBig2 = testArry.every(function (item) {
return item > 2;
});
console.log(isAllBig2); var isSomeBig2 = testArry.some(function (item) {
return item > 2;
});
console.log(isSomeBig2); var filterArray = testArry.filter(function (item) {
return item > 2;
});
console.log(filterArray); var mapArray = testArry.map(function (item) {
return item + 2;
});
console.log(mapArray); var forEachResult = testArry.forEach(function (item) {
if (item >5) {
console.log(item);
}
});
其中,.forEach是无返回值,而其他几个是有返回值的,这点需要注意。
上述输出结果分别是
1.Array.prototype.reverse
会对原函数造成逆序
var arr=[1,2,3]; arr.reverse(); arr;---[3,2,1]
2.Array.prototype.sort
是按照字母进行排序的,原数组也会被修改,即改变指针;
arr.sort(function(a,b)){ return a-b; });
3.Array.prototype.contact
contact不会改变原有的数组,只是返回原数组的一个副本。
知道元素的位置后 5.1 需删除某个元素,则使用splice(index,1) ---若省略第二个参数1,表示删除index后面所有的元素
5.2 需要删除某个元素,替换成1个或多个元素,则使用splice(index,1,a,b...),
5.3 需要在某个元素后插入1个或多个元素, 则使用splice(index,0,a,b...)
6. Array.prototype.reduce & reduceRight 数组两两操作,然后返回一个值
var arr=[1,2,3];
var sum=arr.reduce(function(x,y){
retrun x+y;
},0); ---0表示传入的第一个值
7.Array.isArray(..) 判断是否是数组
或者 ... instanceof Array
.constructor===Array
数组是对象,对象不一定是数组,都可以当做对象添加删除属性
数组自动更新length,按索引访问数组常常比访问一般对象属性明显迅速,
数组对象继承Array.prototype上的大量数组操作方法。
Js 数组(一):基础应用的更多相关文章
- JS 数组的基础知识
数组 一.定义 1.数组的文字定义 广义上说,数组是相同类型数据的集合.但是对于强类型语言和弱类型语言来说其特点是不一样的.强类型语言数组和集合有以下特点. 数组强类型语言:1.数组里面只能存放相同数 ...
- 转→js数组遍历 千万不要使用for...in...
看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...
- js数组(列表)的基本操作
本文主要介绍JS对数组(列表)的基本操作.习惯了用数据库的操作顺序来说明:增.删.改.查:合并,裁剪,排序,格式化. 一.数组元素的添加(增加) 增加数组元素有三种方法:unshift() push ...
- javascript数组详解(js数组深度解析)【forEach(),every(),map(),filter(),reduce()】
Array 对象是一个复合类型,用于在单个的变量中存储多个值,每个值类型可以不同. 创建数组对象的方法: new Array(); new Array(size); new Array(element ...
- Angular JS从入门基础 mvc三层架构 常用指令
Angular JS从入门基础 mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...
- js数组操作记录
一 .splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 in ...
- Python数据分析学习(二):Numpy数组对象基础
1.1数组对象基础 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...
- js数组方法解析
js 数组有很多方法,其中有的常用,有的不常用,归纳几个常用的方法,做个总结: 1. 转换方法: 1.1 valueOf():调用这个方法会返回数组本身 <script> var arr ...
- 转载收藏(js数组方法大全)
js数组方法大全 JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Arra ...
- js 数组知识复习
2.Array类型 2.1 创建数组 两种方式: 1.new Array(); //创建一个空数组 var arr1 = new Array(); //创建一个长度为10的空数组, var arr2 ...
随机推荐
- 深入理解ASP.NET MVC Day1
深入理解ASP.NET MVC ASP.NET vs MVC vs WebForms 许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上 ...
- POJ 2352 && HDU 1541 Stars (树状数组)
一開始想,总感觉是DP,但是最后什么都没想到.还暴力的交了一发. 然后開始写线段树,结果超时.感觉自己线段树的写法有问题.改天再写.先把树状数组的写法贴出来吧. ~~~~~~~~~~~~~~~~~~~ ...
- iOS开发- 拨打电话总结
关于iOS应用拨打电话, 我所知道的有3种办法, 详细例如以下: 一.利用openURL(tel) 特点: 直接拨打, 不弹出提示. 而且, 拨打完以后, 留在通讯录中, 不返回到原来的应用. //拨 ...
- oracle创建user具体指示
一个.用户的概念 用户,这是user,通俗的讲就是参观oracle数据库"人".在oracle在.的各种安全参数的用户可控制,为了保持数据库的安全性,的概念包括模型(schema) ...
- AppiumDriver java部分api
getAppStrings() 默认系统语言对应的Strings.xml文件内的数据. getAppStrings(String language) 查找某一个语言环境对应的字符串文件Strings. ...
- WPF - Visual调试工具Snoop
原文:WPF - Visual调试工具Snoop Snoop经过很长一段时间,最近更新到支持NET 3.5了,它是一个WPF运行时对Visual UI调试的一个工具,最近我用过它调试修改过一个bug, ...
- A WebBrowser Toy
原文:A WebBrowser Toy 记得上大学时,某老师为了防止学生上课不听讲,只准学生在课堂上看他放映的PPT,不准学生拷贝,而考试的内容恰恰是PPT上的内容,于是一个同学来找我,我就用VB写了 ...
- 山寨游戏的未来Apple App Store
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXF1c2hp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- Iframe父页面与子页面之间的调用
原文:Iframe父页面与子页面之间的调用 Iframe父页面与子页面之间的调用 专业词语解释如下: Iframe:iframe元素是文档中的文档. window对象: 浏览器会在其打 ...
- Android-Universal-Image-Loader学习笔记(两)--LruDiscCache
最近最少使用缓存官员最近(LruDiscCache)之前,引入一个概念,一个重要的三个班: key:这是DiscCacheAware接口save里面的方法imageUri通过调用参数FileNameG ...