javascript: 对象和数组
2010-12-14 TECH
尝试解释如下代码:
<script type="text/javascript"> var A = ["a","b","c"]; var B = {0:"a",1:"b",2:"c"}; var C = {a:"a",b:"b",c:"c"}; var D = [{a:"a",b:"b",c:"c"}]; var E = {a:["a","b","c"]}; var F = {a:[{a:[{a:"a"}],b:"b",c:"c"},"b","c"]}; alert("A: "+A[0] +"\r\nB: "+B[0] +"\r\nC: "+C.a +"\r\nD: "+D[0].a +"\r\nE: "+E.a[0] +"\r\nF: "+F.a[0].a[0].a); </script>
javscript的对象是属性和方法的集合。方法就是函数,属性是一个值或一组值(以数组或对象的形式)。
javscript支持四种类型的对象:内部对象、自定义对象、宿主对象(如window 和document)、ActiveX 对象(外部组件)。
数组和对象的区别
1、length属性
在javscript 中,对象和数组几乎是以相同的方式处理的。数组只是一种特殊的对象。
对象和数组的子元素均可以被赋予任意值,数组和对象的区别在于数组有一个“奇妙的”length 属性,而对象没有。
var B= new Array(); B[0] = 0; alert(B.length);//值为1
var A = new Object();
A.Name = “笑而不语”;
alert(A.length); //值为undefined,对象没有length 属性
javscript中所有的对象均支持动态添加和删除属性。这些属性可以有包含数字的任意名称。
var A = new Object(); A.Name = "笑而不语";
var B= new Date(); //日期型对象,可以动态添加和删除属性并赋值
B.XXXX = “笑而不语”;
var C= new Array(); //数组对象,可以动态添加和删除属性并赋值
C.BGYT = “笑而不语”;
由于所有的数组也是对象,所以也支持动态添加和删除属性。
传统的作法是赋给数组元素以0开始的数字索引。
这些数组元素与length属性相交互。
虽然如此,数组对象的属性并不以任何方式影响数组的length。
var A= new Array(3); A[0] = 0; A[1] = 1; A[2] = 2; alert(A.length); //长度为3 A.Name = "笑而不语"; alert(A.length); //长度为3,不受上一句影响
2、数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。
比如在javascript中,可以这样定义一个对象:
var a = new Object(); a.城市="北京";//定义一个名称为"城市"的子元素值为"北京" a.面积=16800; a.人口=1600; alert(a.城市);
但是我们同样可以用一个数组来实现:
var a = new Array();//定义一个空数组,子元素为空 a.城市="北京"; //定义数组a的一个属性为"城市"并赋值"北京",子元素仍为空 a.面积=16800; a.人口=1600; alert(a.城市); alert(a.length);//子元素为空,长度为0
但是结合前面说的就会发现。用数组方式实现的本质是在一个0长度的数据对象上扩展了属性。形象的理解为数组是存在外部的,而纯对象则是存在内部的。
什么时候用对象和数组?
前面说了数组和对象实际上可以同样实现我们数据存贮的功能,我们先看一个例子
var a=[1,2,3,4] var b={0:1,1:2,2:3,3:4} alert(a[0]+"/"+b[0]);
两种情况下的运行结果是相同的!
这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢?
数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。
对象是一种复合数据类型。
创建对象最简单的方法是你的javascript代码中包含对象直接量,也可以通过运算符new创建。
var empty = {}; // 一个空的对象 var point = { x:0, y:0 }; var homer = { "name": "Homer Simpson", "age": 34, }; var a = new Array(); // 一个空的数组对象 var d = new Date(); // 一个时间型对象 var r = new RegExp("javascript", "i"); // 一个正则表达式对象
暂无评论