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);
JavaScript的进阶之路(三)引用类型之Object类型和Array类型的更多相关文章
- JavaScript笔记——引用类型之Object类型和Function类型
<JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...
- JavaScript的进阶之路(四)理解对象2
对象的三个属性 原型属性 1.var v={}的原型是Object.prototype;继承了一个constructor属性指代Object()构造函数,实际的原型是constructor.proto ...
- JavaScript的进阶之路(一)
JavaScript由ECMAScript BOM DOM三部分组成 ECMAScript重要版本1,3,5,6,提供核心语言功能 DOM提供访问和操作网页内容的方法和接口 BOM提供与浏览器交互的的 ...
- JavaScript引用类型之Object类
ECMAScript中的Object类跟Java中的Object类相似,ECMAScript中的全部类都由这个类继承而来,Object类中的全部属性和方法都会出如今其他类中,所以理解Object类,就 ...
- JavaScript正则进阶之路——活学妙用奇淫正则表达式
原文收录在我的 GitHub博客 (https://github.com/jawil/blog) ,喜欢的可以关注最新动态,大家一起多交流学习,共同进步,以学习者的身份写博客,记录点滴. 有些童鞋肯定 ...
- JavaScript的进阶之路(七)客户端JavaScript知识点总结
一.客户端JavaScript主要是BOM DOM的操作和js脚本的兼容性.互用性.可访问性.安全性的应用.以及一些框架的引用. 二.BOM:浏览器对象模型 主要介绍window对象 1.定时器:se ...
- JavaScript的进阶之路(五)理解数组1
数组是值得有序结合,每个值叫做一个元素,每个元素的位置称为索引,索引从0开始. 在JavaScript中,数组是对象的特殊形式.继承自Array.prototype中的属性,有丰富的数组操作方法. 通 ...
- JavaScript的进阶之路(二)函数简介,变量、作用域和内存问题
<h3>ECMAScript中函数不存在函数签名的概念,没有重载</h3><h3>无需指定返回值,可以在任何时候返回任何值.未指定返回值的函数,返回的是一个特殊的u ...
- 深入理解javascript函数进阶系列第三篇——函数节流和函数防抖
前面的话 javascript中的函数大多数情况下都是由用户主动调用触发的,除非是函数本身的实现不合理,否则一般不会遇到跟性能相关的问题.但在一些少数情况下,函数的触发不是由用户直接控制的.在这些场景 ...
随机推荐
- Vs.net 常用命令行
下面的是从 devenv /? 看到的 用法: devenv [解决方案文件 | 项目文件 | 任意文件.扩展名] [开关] devenv 的第一个参数通常是一个解决方案文件或项目文件. 如果 ...
- ubuntu 上运行的django 出现No space left on device错误
运行django出现错误信息: [2016-02-16 14:33:24,476 pyinotify ERROR] add_watch: cannot watch /usr/local/lib/pyt ...
- Opencv3.0: undefined reference to cv::imread(cv::String const&, int)
使用opencv,编译出错: undefined reference to cv::imread(cv::String const&, int) 自opencv3.0之后,图像读取相关代码在i ...
- tp5 重定向缺少index.php报错(No input file specified)
转别人的,有用,Mark一下 public 下的.htaccess 修改为 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multi ...
- API Monitor程序分析工具简介
API Monitor是一个免费软件,可以让你监视和控制应用程序和服务,取得该应用程序的API调用情况. 它是一个强大的工具,看到的应用程序和服务是如何工作的,或跟踪,你在自己的应用程序的问题. AP ...
- 微信小程序,全局变量方法的使用
方法一:app.js 内设置全局变量(如屏宽,屏高的设置) 1.app.js文件,定义全局变量 /定义全局变量 globalData:{ userInfo:null, sysInfo:null, wi ...
- python logging模块的使用
logging 专门用于记录日志的模块,相对于print来说,logging 提供了日志信息的分级.格式化.过滤等功能.在程序中定义丰富有条理的log信息,可以方便分析程序的运行状态,在发生问题是可有 ...
- 安装orcle服务器端后,不需要安装客户端,可通过plsql登录
用PL/SQL连接oracle数据库,不管是本地的还是远程的,一般都需要安装oracle客户端(500M左右)比较大,而且在各个系统上安装也有些讲究,需要修改相应配置文件,有点麻烦,像平时开发时候,我 ...
- Java_方法的基本语法格式
[修饰符] 返回值类型 方法名称([参数列表]){ 方法体 } [ ]中的内容是可有可无的 暂时将方法的修饰符编写为 public static 返回值类型有两种情况 : 第一种:无返回值类型,也就是 ...
- 《JavaScript编程精解》读书笔记
第一章 JavaScript基础:值.变量.控制流程 JavaScript里有六种基本类型:number类型.string类型.boolean类型.object.function和undefined. ...