引用类型

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类型的更多相关文章

  1. JavaScript笔记——引用类型之Object类型和Function类型

    <JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...

  2. JavaScript的进阶之路(四)理解对象2

    对象的三个属性 原型属性 1.var v={}的原型是Object.prototype;继承了一个constructor属性指代Object()构造函数,实际的原型是constructor.proto ...

  3. JavaScript的进阶之路(一)

    JavaScript由ECMAScript BOM DOM三部分组成 ECMAScript重要版本1,3,5,6,提供核心语言功能 DOM提供访问和操作网页内容的方法和接口 BOM提供与浏览器交互的的 ...

  4. JavaScript引用类型之Object类

    ECMAScript中的Object类跟Java中的Object类相似,ECMAScript中的全部类都由这个类继承而来,Object类中的全部属性和方法都会出如今其他类中,所以理解Object类,就 ...

  5. JavaScript正则进阶之路——活学妙用奇淫正则表达式

    原文收录在我的 GitHub博客 (https://github.com/jawil/blog) ,喜欢的可以关注最新动态,大家一起多交流学习,共同进步,以学习者的身份写博客,记录点滴. 有些童鞋肯定 ...

  6. JavaScript的进阶之路(七)客户端JavaScript知识点总结

    一.客户端JavaScript主要是BOM DOM的操作和js脚本的兼容性.互用性.可访问性.安全性的应用.以及一些框架的引用. 二.BOM:浏览器对象模型 主要介绍window对象 1.定时器:se ...

  7. JavaScript的进阶之路(五)理解数组1

    数组是值得有序结合,每个值叫做一个元素,每个元素的位置称为索引,索引从0开始. 在JavaScript中,数组是对象的特殊形式.继承自Array.prototype中的属性,有丰富的数组操作方法. 通 ...

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

    <h3>ECMAScript中函数不存在函数签名的概念,没有重载</h3><h3>无需指定返回值,可以在任何时候返回任何值.未指定返回值的函数,返回的是一个特殊的u ...

  9. 深入理解javascript函数进阶系列第三篇——函数节流和函数防抖

    前面的话 javascript中的函数大多数情况下都是由用户主动调用触发的,除非是函数本身的实现不合理,否则一般不会遇到跟性能相关的问题.但在一些少数情况下,函数的触发不是由用户直接控制的.在这些场景 ...

随机推荐

  1. 吴裕雄 python 机器学习——K均值聚类KMeans模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...

  2. python高级(四)—— 文本和字节序列(编码问题)

    本文主要内容 字符 字节 结构体和内存视图 字符和字节之间的转换——编解码器 BOM鬼符  标准化Unicode字符串 Unicode文本排序 python高级——目录 文中代码均放在github上: ...

  3. P2472 [SCOI2007]蜥蜴

    传送门 求无法逃离的蜥蜴总数的最小值就是求最多逃离的蜥蜴总数 所以显然考虑最大流,一个流量的路径就相当于一只蜥蜴逃离的路径 发现每个位置有一个最大经过次数,所以把每个位置拆成两个点$x,y$,$x$ ...

  4. 透视效果shader(边缘光)

    思路:渲染两次. 1.第一次渲染:利用Greater进行深度测试,当目标被遮挡时,用一个边缘光的效果显示. 2.第二次渲染:正常渲染. 边缘光的思路:观察方向和顶点法向量夹角越大,边缘光越明显.边缘光 ...

  5. python pandas使用chunksize异步拆分固定行数的文件

    import pandas as pd import asyncio from collections import defaultdict collect = defaultdict(list) # ...

  6. 移远EC20的使用

    一 发短信 3. 推荐短信流程3.1 查询 短信存储区AT+CPMS?+CPMS: "ME",19,255,"ME",19,255,"ME" ...

  7. Json 装 list<object>objectList

    List<MallGoodComment> mallGoodCommentList = JSONObject.parseArray(mallGoodComments, MallGoodCo ...

  8. 制作web安装程序

    出处:http://www/i-blog.cn/u/chenli/archives/2006/8.html 本文参考http://blog.csdn.net/libra1983/archive/200 ...

  9. 参数化登录QQ空间实例

    通过参数化的方式,登录QQ空间 实例源码: # coding:utf-8 from selenium import webdriver import unittest import time clas ...

  10. springmvc整合mybatis详细教程

    需求:整合springmvc和mybatis 整合的目标是:控制层采用springmvc,持久层使用mybatis 整合思想 dao层: 1.SqlMapConfig.xml.空文件即可.但是需要头文 ...