(一) 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是无返回值,而其他几个是有返回值的,这点需要注意。

  上述输出结果分别是

    false
    true
    [3, 4, 5, 6]
    [3, 4, 5, 6, 7, 8]
    6
   
   { }=>Object.prototype
    []=>Array.prototype

   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不会改变原有的数组,只是返回原数组的一个副本。

          arr.contact([12,11],13); --里面有一维数组,会被拉平一次
       arr.contact([12,[13,14]]);     -有多维数组,最外的一层数组被拉平,里层数组不会被拉平
  
     4.Array.prototype.slice  返回部分数组
     
     var arr=[1,2,3,4,5];
     arr.slice(1,3); --- 2,3  左开右闭区间 ,若省略第二个参数,表示删除index后面所有的元素
     arr.slice(1,-1); --- 2,3,4  -1表示从最后一个元素
  
  5.Array.prototype.splice 数组拼接函数
 
       需要知道某个元素在数组中的位置,可用indeOf(元素名称),不存在返回-1,

      知道元素的位置后    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 数组(一):基础应用的更多相关文章

  1. JS 数组的基础知识

    数组 一.定义 1.数组的文字定义 广义上说,数组是相同类型数据的集合.但是对于强类型语言和弱类型语言来说其特点是不一样的.强类型语言数组和集合有以下特点. 数组强类型语言:1.数组里面只能存放相同数 ...

  2. 转→js数组遍历 千万不要使用for...in...

    看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...

  3. js数组(列表)的基本操作

    本文主要介绍JS对数组(列表)的基本操作.习惯了用数据库的操作顺序来说明:增.删.改.查:合并,裁剪,排序,格式化. 一.数组元素的添加(增加) 增加数组元素有三种方法:unshift()  push ...

  4. javascript数组详解(js数组深度解析)【forEach(),every(),map(),filter(),reduce()】

    Array 对象是一个复合类型,用于在单个的变量中存储多个值,每个值类型可以不同. 创建数组对象的方法: new Array(); new Array(size); new Array(element ...

  5. Angular JS从入门基础 mvc三层架构 常用指令

    Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...

  6. js数组操作记录

    一 .splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 in ...

  7. Python数据分析学习(二):Numpy数组对象基础

    1.1数组对象基础 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  8. js数组方法解析

    js 数组有很多方法,其中有的常用,有的不常用,归纳几个常用的方法,做个总结: 1. 转换方法: 1.1 valueOf():调用这个方法会返回数组本身 <script> var arr ...

  9. 转载收藏(js数组方法大全)

    js数组方法大全 JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Arra ...

  10. js 数组知识复习

    2.Array类型 2.1 创建数组 两种方式: 1.new Array(); //创建一个空数组 var arr1 = new Array(); //创建一个长度为10的空数组, var arr2 ...

随机推荐

  1. ext panel 它们的定义图像刷新

    从管理发展的近期回报.事实上,它采取了一些努力,以适应,应对来自另一个角度的问题只.外观似良好的效果.阿土,项目用到了EXT js.百度大神里面没找到一个合适的图片组件.自己写了个能够刷新的图片组件. ...

  2. Cookie基础

    周末百度笔试,答得题都会,就是不仔细不心细,提前一个小时交卷子,想起来就已经晚了.问了一个cookie的问题,我SB的蒙住了,于是乎,似乎是跪掉了,回来后总结了下Cooke的相关问题.###获取coo ...

  3. javascript系列之核心知识点(二)

    变量对象       变量对象是一个与执行上下文相关联的容器.它是一个和上下文密切结合的特殊对象,含有定义在上下文中的变量和函数声明.注意,函数表达式(和函数声明不同的)不包含在变量对象中. 变量对象 ...

  4. C#函数式编程-序列

    C#函数式编程之序列 过了许久的时间,终于趁闲暇的时间来继续将函数式编程这个专辑连载下去,这段时间开头是为IOS这个新方向做准备,将OC的教程写成了SWIFT版,当然我个人是支持Xamarin,但是我 ...

  5. Android Studio怎样更改JDK和SDK的路径?

    这个对于非常多刚转到Android Studio上的来说,确实是一个问题.可能你在设置里面找了非常久都没找到这个选项. 直接上图吧,按下图就能够找到设置的地儿了,然后直接设置到你SDK或者JDK的路径 ...

  6. Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)

    方法是与某些特定类型相关联的函数.类.结构体.枚举都能够定义实例方法:实例方法为给定类型的实例封装了详细的任务与功能.类.结构体.枚举也能够定义类型方法:类型方法与类型本身相关联.类型方法与 Obje ...

  7. iOS 学习

    iOS 学习资料 (适合初学者) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解 ...

  8. Android adb端口转发调试助手Packet Sender

    相信大家做过安卓开发或者安卓自动化测试开发的都离不开adb这个Android Debug Bridge这个工具,该工具有个很重要的功能就是端口转发.比如你在目标安卓机器端建立了一个服务来处理获取当前界 ...

  9. 给phpcms v9加入一个主题radio无线电button,它可反复使用,以创建不同的专题部分内容编辑器,添加一个主题来定义自己的领域

    1. 2. 找到 phpcms\modules\special\templates中的special_add.tpl.php和special_edit.tpl.php文件 special_add.tp ...

  10. 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...