JavaScript的进阶之路(三)引用类型之Object类型和Array类型

引用类型

Object类型

function a(num){
				if(num>3){
					a(--num);
				}
				console.log(num);
			}
			a(5);
			//如何创建对象的实例
			var obj1= new Object();
			console.log(obj1);
			obj1.name="吴琼";
			obj1.age=28;
			console.log(obj1.name+" "+obj1.age);
			//对象字面量语法 ,有点封装的感觉
			var obj2 = {
				name:"吴琼",
				age:28
			};
			var obj3 = {
				age:28,
				age_wo:30
			};
			console.log(obj3["age_wo"]);
			console.log(obj2.name+" "+obj2.age);
			function show(arg){
				var s="";
				if(arg.name != undefined){
					console.log(arg.name);
				}else{
					console.log("没有这个名字");
				}
			}
			show(obj3);
			show(obj1);

  

Array类型

ECMAScript中数组中的每一项可以保存任何类型的数据。而且,数组的大小是可以自动调整的。

设置数组的长度array.length=2;小于数组长度则移除数组中的项,大于数组的长度则添加undefined项

数组的长度是:array.length;数组最后一项的下标是:array.length-1

数组的方法

检测数组

ECMAScript3 instanceof

ECMAScript5 Array.isArray() IE9以上支持

准确检测数组方法:22.1.1

转换方法

toString() \ valueOf() \ toLocalString() \ join()

栈方法:栈是一种后进先出的数据结构。

push() 返回新数组的长度 pop()返回从数组最后移除的项

队列方法:先进先出。

unshift()返回新数组的长度 shift() 返回从数组前端移除的项

重排序方法:reverse() sort() 他们的返回值是经过重新排序的数组。

reverse()反转数组项的顺序,但不够灵活 sort()方法默认从小到大排序,原理是调用每一项的toString()方法,然后比较字符串

操作方法:concat()连接数组 slice()截取数组 splice()删除、插入、替换数组中的项

concat()创建一个新数组,不影响原数组。

slice()创建一个新数组,不影响原数组,参数为下标,1个的时候从下标位置到最后,2个的时候第二个下标不包含。

splice()创建一个新数组,影响原数组。返回从原数组中删除的项,如果没有删除项则返回空数组

操作方法是否可以理解为:从已知数组中取一些有用的项组成一个新的数组,便于我们去操作呢

位置方法:IE9+ indexOf() lastIndexOf() 查找特定项在数组中的位置,没有返回-1(判断数组中是否含有某一项)

ECMA5为数组定义了5个迭代方法:(IE9+)都有2个参数:给定函数和运行该函数的作用域--影响this的值。给定函数有3个参数 项 下标 数组

1、every() 每一项都符合给定函数则返回true

2、some() 只要有一项符合给定函数则返回true

3、filter() 找出符合给定函数的项,组成新的数组

4、map() 返回运行给定参数的结果,组成新的数组

5、forEach() 没有返回值,只是对数组中的每一项运行给定函数

ECMA5缩小方法:(IE9+)reduce() reduceRight() 适用于求值运算

//关于数组
			//创建数组和存取数组
			var arr1=new Array();
			arr1=[1,2,3];
			var arr2=[];
			var arr3=["吴琼",2,"str",{name:"吴琼",age:28}];
			arr2[0]=1;
			arr1[3]=4;
			arr1[arr1.length]=5;
			console.log(arr1);
			console.log(arr1[arr1.length-1]);//最后一项的索引始终是length-1
			console.log(arr2);
			console.log(arr2[0]);
			console.log(arr3);
			console.log(arr3[3].name);
			if(arr1 instanceof Array){
				console.log("arr1 是数组");
			}else{
				console.log("arr1 不是数组");
			}
			if(Array.isArray(arr2)){
				console.log("arr2 是数组");
			}else{
				console.log("arr2 不是数组");
			};
			console.log(arr1.toString());
			console.log(arr1.toLocaleString());
			console.log(arr1.valueOf());
			console.log(arr1.join("/"));
			//alert(arr1.join());  //后台自动调用arr1.toString();
			console.log(arr1.push(6,7,"8","pop()这个项"));//返回新数组的长度
			console.log(arr1);
			console.log( arr1.pop());  //返回取出来的项

			console.log(arr1);
			var arr4=new Array();
			console.log(arr4.unshift(1,2));  //返回新数组的长度 2
			console.log(arr4);
			console.log(arr4.shift());
			console.log(arr4);
			console.log(typeof arr4.shift());
			console.log(arr4);
			var arr5=[0,5,15,10,20,"a","b",30];
			console.log(arr5.reverse()); //改变了原数组
			console.log(arr5.sort());    //[0,10,15,20,5]  转变为字符串比较后的排序结果
			console.log(arr5.sort(function(a,b){return a>b}));
			var colors=[1,2,3];
			var colors2=colors.concat(4,[5,6]);
			console.log(colors2);  //返回一个新数组
			var colors3=colors2.slice(1);
			var colors4=colors2.slice(1,5);
			var colors5=colors2.slice(1,colors2.length-1);
			console.log(colors3);
			console.log(colors4);
			console.log(colors5);
			var cars =["奔驰","宝马","奥迪"];
			var cars1 =cars.splice(0,1);   //删除奔驰
			console.log(cars);
			console.log(cars1);
			var cars2 = cars.splice(0,1,"奔驰","别克");//替换宝马
			console.log(cars);
			console.log(cars2);
			var cars3 = cars.splice(2,0,"大众"); //插入大众
			console.log(cars);
			console.log(cars3);
			var age={name:"wq"};
			var age1=[{name:"wq"},2,{a:2,b:3}];
			if(!Array.indexOf){
             		Array.prototype.indexOf = function(el){
             		    for (var i=0,n=this.length; i<n; i++){
             			    if (this[i] === el){
             				    return i;
             		        }
             		    }
                        return -1;
                    }
                }
			console.log(age1.indexOf({name:"wq"}));  //-1
			console.log(age1.indexOf(2));   //1
			console.log(arr1.indexOf({a:2,b:3}));//-1

			var iter=[1,2,3,4,3,2,1];
			var everyResult = iter.every(function(item,index,array){
				return item > 2;
			});
			console.log(everyResult);
			var someResult = iter.some(function(item,index,array){
				return item > 2;
			});
			console.log(someResult);
			var filterResult = iter.filter(function(item,index,array){
				return item > 2;
			});
			console.log(filterResult);
			var mapResult = iter.map(function(item,index,array){
				return item > 2;
			});
			console.log(mapResult);   //这个返回一个由布尔值组成的数组
			var mapResult1 = iter.map(function(item,index,array){
				return item * 2;
			});
			console.log(mapResult1);
			iter.forEach(function(item,index,array){
				//这里执行一些代码
				if(array[index]>2){
					console.log(item);
				}else{

				}
			});
			console.log(iter);
			var sum=iter.reduce(function(pre,cur,index,array){
				return pre + cur;
			});
			console.log(sum);

  

时间: 2024-10-12 15:51:39

JavaScript的进阶之路(三)引用类型之Object类型和Array类型的相关文章

JavaScript引用类型之Object类

ECMAScript中的Object类跟Java中的Object类相似,ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其它类中,所以理解Object类,就可以更好的理解其它类. 对象的创建 JavaScript的对象是属性的容器,其中每个属性都拥有名字和值.属性的名字可以是包括空字符串在内的任意字符串.属性值可以是除undefined值之外的任何值. JavaScript里的对象是无类型的.它对新属性的名字和属性的值没有限制.对象和适用于汇集和管理数

JavaScript的进阶之路(二)函数简介,变量、作用域和内存问题

<h3>ECMAScript中函数不存在函数签名的概念,没有重载</h3><h3>无需指定返回值,可以在任何时候返回任何值.未指定返回值的函数,返回的是一个特殊的undefined值</h3> <script type="text/javascript"> function sayHi(){ console.log("Hi"); }; sayHi(); function sayName(name,age){

Java程序设计进阶之路三:异常

一.读取文件的步骤: 读取文件操作的每一步都依赖上一步的实现 二.代码分析 1.传统型错误码反馈机制 class errorCodeTypeFile{ int errorCode = 0; if(theFileOpened) { determine its size; if(gotTheFileLength ){ allocate that much memory; if(gotEnoughMemory){ read the file into the memory; if(readFailed

网易云课堂_C语言程序设计进阶_第三周:结构:结构、类型定义、联合

3.1 枚举 3.2 结构 3.3 类型定义 3.1 枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法来表明: enum 枚举类型名字{名字0,...,名字n}; 枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,它们的类型是int,值则依次从0到n.如: enum colors{red, yellow, green}; 就创建了三个常量,red的值是0,yellow的值是1,而green的值是2 当需要一些可以排列起来的常量值时,定义枚举的意义就是给

JavaScript基础——引用类型(一)Object类型、Array类型

引用类型简介 引用类型的值(对象)是引用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当(虽然不妥当,在别人提起的时候,就是指ECMAScript中的引用类型,在一次面试的时候,有人就和面试官争论说"JS中没有'类'这个概念,结果可想而知--").尽管ECMAScript从技术上讲是一门面向对象的语言,但它不举杯传统的面向对象语言所支持的类和接口等基本结构.引用类型有时候也被称为对象定义,因为它们描述的是一

JavaScript入门之数组:Array类型详解

数组应该是每个语言中都用得极度频繁的数据类型,JavaScript也不例外. 个人认为,Js中的Array类型非常强大. 首先没有C/C++等语言需要在数组初始化时指定数组长度(并不可变)的要求. 也不需要指定特定的基本数据类型(Number,String,Boolean,Null,Undefined,Object),也就意味着,一个数组中可以存多种数据类型的值. 我想总结一下Array的常用方法,在这之前,先介绍一下Array的基本用法: 基本用法: 1.创建数组: //创建空数组 var a

JavaScript进阶之路(二)——变量与基本数据类型

前言 JavaScript中的变量为松散类型,所谓松散类型就是指当一个变量被申明出来就可以保存任意类型的值,就是不像SQL一样申明某个键值为int就只能保存整型数值,申明varchar只能保存字符串.一个变量所保存值的类型也可以改变,这在JavaScript中是完全有效的,只是不推荐.相比较于将变量理解为“盒子“,<JavaScript编程精解>中提到应该将变量理解为“触手”,它不保存值,而是抓取值.这一点在当变量保存引用类型值时更加明显. JavaScript中变量可能包含两种不同的数据类型

【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三)

目录: [SSH进阶之路]Struts基本原理 + 实现简单登录(二) [SSH进阶之路]一步步重构MVC实现Struts框架--从一个简单MVC开始(三) [SSH进阶之路]一步步重构MVC实现Struts框架--封装业务逻辑和跳转路径(四) [SSH进阶之路]一步步重构MVC实现Struts框架--彻底去掉逻辑判断(五) [SSH进阶之路]一步步重构MVC实现Struts框架--完善转向页面,大功告成(六) 上篇[SSH进阶之路]Struts基本原理 + 实现简单登录(二),我们介绍MVC和

JavaScript高级程序设计(第三版) (5章 引用类型)

引用类型 在ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起.这种数据类型不具备传统的面向对象语言所支持的类和接口等基本结构.引用类型有时候也被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 5.1    Object类型 5.2    Array类型 特点: 每一项可以保存任何类型的数据: 大小可以动态调整 length大小可变(最大值4294967295) 两种创建方式: 一:通过构造函数创建 //不指定大小 var colors1 = new Arr