引用类型是一种将数据和功能组合到一起的数据结构,它与类相似,但是是不同的概念:ECMAScript虽然是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和结构等基本结构。引用类型也被称为“对象定义”。

一、Object类型

创建实例方式:

1使用new操作符+构造函数

 var person = new Object();
 person.name = "Lillian";
 person.age = 29;

2使用对象字面量表示法

2.1属性不加引号

 var person = {
     person: "Lillian",
     age:29
 };

2.2属性加引号

 var person = {
     "person": "Lillian",
     "age":29,
     5:true  //数值属性会自动转化成字符串
 };

2.3使用空花括号

 var person = {};
 person.name = "Lillian";
 person.age = 29;

访问属性的方式:

使用点或方括号:

 alert(person.name);
 alert(person[age]);

二、Array类型

创建方式:

1使用Array构造函数

 var colors = new Array();
 var colors = new Array(20);  //length = 20
 var colors = new Array("red","blue","yellow");  //length = 3

2使用数组字面量

 var colors = ["red", "blue", "yellow"];
 var names = [];
 var values = [1,2,];//不要这样,会创建一个包含2项或3项的数组
 var options = [,,,,,];//不要这样,会创建一个包含5项或6项的数组

除了Object类型,Array类型恐怕是JavaScript最常见的类型了,它的方法很多,这里先通过导图一览,再依次举例。

修改Array数组的内容:

 var colors = ["red", "blue", "yellow"];
 colors[0] = "green";  //修改第一项
 colors[colors.length] = "black";//增加一项,值为"black"

 colors.length = 5;
 alert(colors[4]);//长度增加了1,但是未赋值,这一项为undefined

 colors.length = 1;
 alert(colors[1]);//undefined, 通过设置长度为1,移除了除第一项外的所有项

检测某个对象是不是数组:

 if (value instanceof Array) {};//不适用于包含多个框架的网易
 if( Array.isArray(value)){}; //对浏览器版本要求比较高

转换方法:

 var colors = ["red", "blue", "yellow"];
 colors.toString();  //"red", "blue", "yellow"
 colors.toLocaleString(); //"red", "blue", "yellow"
 colors.valueOf();//["red", "blue", "yellow"]
 alert(colors);//"red", "blue", "yellow"
 alert(colors.join(","));//"red", "blue", "yellow"
 alert(colors.join("||"));//"1||2||3"

栈方法:LIFO

 var colors = ["red", "blue", "yellow"];
 colors.push("black");
 colors.pop();//“black"

队列方法:LILO

 var colors = ["red", "blue", "yellow"];
 colors.push("black");
 colors.shift();//“red"

重排序方法:

     var values = [1,0,15,14,2];
     values.reverse();  //[2, 14, 15, 0, 1]
     values.sort();//[0, 1, 14, 15, 2]

     function compare(value1, value2){
         if(value1 < value2){
             return -1;
         }else if(value1 > value2){
             return 1;
         }else{
             return 0;
         }
     }

     values.sort(compare);// 0,1,2,14,15

操作方法:

     //concat()将接收到的参数添加在末尾
     var colors = ["red","green","blue"];
     var colors2 = colors.concat("yellow",["black", "brown"]);
     //colors2:"red","green","blue","yellow",black", "brown"

     //slice()在当前数组中截取部分
     var colors = ["red","green","blue","yellow"];
     var colors2 = colors.slice(1);//["green","blue","yellow"]
     var colors3 = colors.slice(1,3);//["green","blue"]

     //splice()删除和插入
     var colors = ["red","green","blue","yellow"];
     var removed = colors.splice(0,2); //从第一项开始,删除两项

     var colors = ["red","green","blue","yellow"];
     var removed = colors.splice(1,0,"black"); //在第二项后,插入一项

     var colors = ["red","green","blue","yellow"];
     var removed = colors.splice(1,1,"black"); //在第二项后,删除一项后,再插入一项

位置方法:

     var numbers = [1,2,3,4,5,4,3,2,1];
     alert(numbers.indexOf(4));
     alert(numbers.indexOf(4,4));
     alert(numbers.lastIndexOf(4)); 

迭代方法:

 /*
 迭代方法:函数(数组项的值,该项在数组中的位置,数组对象本身)
 */ 

 //every():如果每一项都返回true,则函数返回true
 var numbers = [1,2,3,4,5,4,3,2,1];
 var result = numbers.every(function(item, index, array){
     return (item > 2);
 });
 alert(result); //false

 // some():如果有一项返回true,则函数返回true
 var numbers = [1,2,3,4,5,4,3,2,1];
 var result = numbers.some(function(item, index, array){
     return (item > 2);
 });
 alert(result); //true

 //filter():过滤出满足条件的值
 var numbers = [1,2,3,4,5,4,3,2,1];
 var result = numbers.filter(function(item, index, array){
     return (item > 2);
 });
 alert(result); //[3,4,5,4,3]

 //map():返回函数调用的结果并组成数组
 var numbers = [1,2,3,4,5,4,3,2,1];
 var result = numbers.map(function(item, index, array){
     return (item * 2);
 });
 alert(result); //[2,3,6,8,10,8,6,4,2];

 //forEach():没有返回值
 var numbers = [1,2,3,4,5,4,3,2,1];
 numbers.forEach(function(item, index, array){
     alert(item);
 }); 

缩小方法:

 /*
     迭代函数:(前一个值,当前值,项的索引,数组对象)
     迭代所有项,返回一个最终结果
     reduceRight是从数组的最后一项向前遍历
 */
 var values = [1,2,3,4,5];
 var sum = values.reduce(function(prev, cur, index, array){
 //var sum = values.reduceRight(function(prev, cur, index, array){
     return prev + cur;
 });
 alert(sum); 

《JAVASCRIPT高级程序设计》第五章(1)的更多相关文章

  1. 《JavaScript高级程序设计》——第二章在HTML使用JavaScript

    这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...

  2. JavaScript 高级程序设计 第5章引用类型 笔记

    第五章 引用类型 一.object类型 1.创建方法: 1.使用new 操作符创建 var person=new object() Person.name=”Nicholasa” Porson.age ...

  3. 《JavaScript 高级程序设计》第一章:简介

    JavaScript 历史 JavaScript的诞生的主要是当时的 netspace 公司谋求为自己的浏览器 Navigator 添加一种脚本语言,以便在本地客户端进行一些行为操作,而这一功能的需求 ...

  4. JavaScript高级程序设计第20章JSON 笔记 (学习笔记)

    第二十章 JSON 1.Json 可以表示三种类型的值: 1.简单值: 表示数值:5  表示字符串:“hello wrold”注表示字符串时必须使用双引号 2.对象: {“name”:“mi”,”ag ...

  5. JavaScript高级程序设计第14章表单脚本 (学习笔记)

    第十四章 表单脚本 1.阻止默认表单提交 1.提交表单数据 1.使用type=submit提交按钮 2.使用submit():方法 注意:当用户点击提交按钮时,会触发submit事件,从而在这里我们有 ...

  6. 读书时间《JavaScript高级程序设计》五:DOM

    DOM(文档对象模型)是针对HTML文档的一个API,描绘了一个层次化的节点树,可以添加.移除.修改页面的某一部分. 一个简单的文档结构 <!DOCTYPE html> <html& ...

  7. 《JAVASCRIPT高级程序设计》第一章

    在使用调制解调器的时代,频繁的表单验证对客户端来说是一个很大的负担,javascript,作为一种专门进行表单验证的客户端脚本语言诞生了.到今天,javascript早已超越了当初设定的角色.Java ...

  8. 《JavaScript高级程序设计》——第一章JavaScript简介

    第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...

  9. javascript高级程序设计第5章,引用类型

    object类型: 创建object实列的方式有两种,一种是new()方法,一种是对象字面量表示法: 第一种法方:  var obj = new object(); obj.name = 'name' ...

  10. javascript高级程序设计第四章 变量、作用域和内存问题

    变量包含两种,,基本类型和引用类型 基本类型是指一些简单的字段: 引用类型是☞由多个值构成的对象  引用类型的值是保存在内存中的对象,在javascript中是不允许直接访问内存中的位置; 函数的参数 ...

随机推荐

  1. hibernate--student_course_score

    学生, 课程,分数的设计. a)使用联合主键@EmbeddedId 使用Serializable接口 b)不适用联合主键 联合主键: 3张表, student: id, name course: id ...

  2. andorid之摄像头驱动流程--MTK平台

    原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过D ...

  3. js动画(三)

    咳咳咳咳,感冒了感冒了,鼻塞,蓝瘦啊!嘴巴也开裂,哎,心疼自己.想到这是第三只唇膏了!只怪,放荡不倔爱自由, 行驶在冷风路上么,北风那个吹啊吹啊吹啊,好了,发神经发完了,接下来进入正题,严肃脸.(字数 ...

  4. 十大滤波算法程序大全(Arduino精编无错版)(转)

    源:十大滤波算法程序大全(Arduino精编无错版) 转载请注明出处:极客工坊  http://www.geek-workshop.com/thread-7694-1-1.html

  5. 关于LCD以及BMP和RGB565

    源: 关于LCD以及BMP和RGB565

  6. Delphi中unicode转汉字函数(转)

    源:Delphi中unicode转汉字函数 近期用到这个函数,无奈没有找到 delphi 自带的,网上找了下 有类似的,没有现成的,我需要的是 支持 “\u4f00 ” 这种格式的,即前面带标准的 “ ...

  7. 使用Java操作文本文件的方法详解

    使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...

  8. Android 5.0之前屏幕截图的方法

    截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不 ...

  9. 数据库ER图 PowerDesigner

    一.概念数据模型概述数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求:1)能够比较真实地模拟现实世界2)容易为人所理解3)便于计算机实现 概念数据模型也称信息模型,它以实体-联系(E ...

  10. 对float的理解

    从IE6下的双边距引出 对一个div设置float:left;同时设置了margin-left:100px时在IE6下会出现双边距. 有两种解决办法: 1,推荐办法.加display:inline 2 ...