其实js中的引用类型就是java中的类,数据和功能和集合;对象就相当于类的实例。
一、object类型
js中的引用类型的值基本都是Object的实例,一般使用new操作符或者对象字面量的方法定义对象。
var person = new Object();
person.name = "Nicholas";
var person = {
name : "Nicholas",
age : 29
};
需要注意的一点:访问对象属性的方法有两种方式,方括号或者点,一般使用点访问,但是在某些特殊情况下使用方括号!
二、Array类型
1、创建
创建时候,也有两种方法:new操作符或者数组字面量(不调用array构造函数)的方法定义一个数组。
var colors = new Array();
var wallace=[];
注意!!!!!:
var values = [1,2,];
在IE 中,values 会成为一个包含3 个项且每项的值分别为1、2 和undefined 的数组;在其他浏览器中,values 会成为一个包含2 项且值分别为1 和2 的数组。原因是IE8 及之前版本中的ECMAScript 实现在数组字面量方面存在bug。像这种省略值,不建议使用。
2、js数组的独特性
js数组相比其他语言的数组,更加灵活,体现在:
var colors = ["red", "blue", "green"];
当访问的下标超过了colors.length-1,不会报错,而是把所有colors.length到访问的下标值都设置为undefined.
数组的length 属性很有特点——它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。下面例子中随着不断赋值,数组的length在不断变大。
var colors = ["red", "blue", "green"];
colors[colors.length] = "black";
colors[colors.length] = "brown";
3、数组中的一些方法
valueOf():返回最适合该对象类型的原始值;
toString(): 将该对象的原始值以字符串形式返回。
在数值运算里,会优先调用valueOf(),如a + b;
在字符串运算里,会优先调用toString(),如alert(c)。push() pop() shift() unshift() reverse() sort() concat() slice() splice() indexOf() lastIndexOf()略
- es5中的五个迭代方法
每个函数都要接受一(两)个参数,每一项上运行的函数和(可选的)运行该函数的作用域对象——影响this 的值。其中运行函数要接受三个参数::数组项的值、该项在数组中的位置和数组对象本身。这五个函数都不会修改原数组。
iteraFunc(function(item, index, array){},可选this)
every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
filter():对数组中的每一项运行给定函数,返回该函数会返回true 的项组成的数组。
forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。
4. 归并方法reduce()和reduceRight()
这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。其中,reduce()方法从数组的第一项开始,逐个遍历到最后。
而reduceRight()则从数组的最后一项开始,向前遍历到第一项。 这两个方法都接收两个参数:
一个在每一项上调用的函数和(可选的)作为归并基础的初始值。调用函数接收4 个参数:
前一个值、当前值、项的索引和数组对象。
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15