`
sdcyst
  • 浏览: 59154 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

javascript面向对象技术基础(二)

阅读更多

数组
我们已经提到过,对象是无序数据的集合,而数组则是有序数据的集合,数组中的数据(元素)通过索引(从0开始)来访问,数组中的数据可以是任何的数据类型.数组本身仍旧是对象,但是由于数组的很多特性,通常情况下把数组和对象区别开来分别对待(Throughout this book, objects and arrays are often treated as distinct datatypes.This is a useful and reasonable simplification; you can treat objects and arrays as separate types for most of your JavaScript programming.To fully understand the behavior of objects and arrays, however, you have to know the truth: an array is nothing more than an object with a thin layer of extra functionality. You can see this with the typeof operator: applied to an array value, it returns
the string "object".  --section7.5).
创建数组可以用"[]"操作符,或者是用Array()构造函数来new一个.

var array1 = [];  //创建空数组
var array2 = new Array();  //创建空数组
array1 = [1,"s",[3,4],{"name1":"NAME1"}]; //
alert(array1[2][1]);  //4   访问数组中的数组元素
alert(array1[3].name1); //NAME1 访问数组中的对象
alert(array1[8]);   //undefined
array2 = [,,];  //没有数值填入只有逗号,则对应索引处的元素为undefined
alert(array2.length); //3
alert(array2[1]);     //undefined

 用new Array()来创建数组时,可以指定一个默认的大小,其中的值此时为undefined,以后可以再给他们赋值.但是由于javascript中的数组的长度是可以任意改变的,同时数组中的内容也是可以任意改变的,因此这个初始化的长度实际上对数组没有任何的约束力.对于一个数组,如果对超过它最大长度的索引赋值,则会改变数组的长度,同时会对没有赋值的索引处赋值undefined,看下面的例子.

var array = new Array(10);
alert(array.length);   //10
alert(array[4]);       //undefined
array[100] = "100th";  //这个操作会改变数组的长度,同时将10-99索引对应的值设为undefined
alert(array.length);   //101
alert(array[87]);      //undefined

 可以用delete操作符删除数组的元素,注意这个删除仅仅是将数组在该位置的元素设为undefined,数组的长度并没有改变.我们已经使用过了数组的length属性,length属性是一个可以读/写的属性,也就是说我们可以通过改变数组的length属性来任意的改变数组的长度.如果将length设为小于数组长度的值,则原数组中索引大于length-1的值都会被删除.如果length的值大于原始数组的长度,则在它们之间的值设为undefined.

var array = new Array("n1","n2","n3","n4","n5");  //五个元素的数组
var astring = "";
for(var i=0; i<array.length; i++) {           //循环数组元素
    astring += array[i];
}
alert(astring);       //n1n2n3n4n5
delete array[3];                   //删除数组元素的值
alert(array.length + "_" + array[3])  //5_undefined

array.length = 3;    //缩减数组的长度
alert(array[3]);     //undefined
array.length = 8;    //扩充数组的长度
alert(array[4]);     //undefined

 对于数组的其他方法诸如join/reverse等等,在这就不再一一举例.

通过上面的解释,我们已经知道,对象的属性值是通过属性的名字(字符串类型)来获取,而数组的元素是通过索引(整数型 0~~2**32-1)来得到值.数组本身也是一个对象,所以对象属性的操作也完全适合于数组.

var array = new Array("no1","no2");
array["po"] = "props1";
alert(array.length);   //2
//对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此)
alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1
 
分享到:
评论
18 楼 yuyee 2009-05-04  
很不错,赞一个,收藏系列
17 楼 zhuxinyu 2009-04-29  
风雪涟漪 写道

因为 firefox 忽略逗号后面为空的情况了。。。如 a=[1,2,] 在firefox 只有2个 ie里认为还有第三个元素是undefined.浏览器差异把。一个逗号。。。。呵呵

这一点还是认为IE做的比较正确。
16 楼 zhuxinyu 2009-04-29  
hanjs 写道

你指定了9,是number,那么肯定可以处理的。我说的数组按其本意是只接受数字作为下标的。如果增加了string的,那么就和map差不多了,形成了key与value的形式


这个应该是给对象添加了一个属性,属性名称是key。值是value
15 楼 forgood 2009-02-23  
delete删除数组的元素时,是把该元素 赋值为undefined,而delete删除属性的时候,是直接删除掉,在使用for/in列举属性时不再可以列举。
14 楼 zxianyue 2009-02-22  
= =这个世界上有一种工具叫搜索。。。
13 楼 fornever 2009-01-04  
风雪涟漪 写道

因为 firefox 忽略逗号后面为空的情况了。。。如 a=[1,2,] 在firefox 只有2个 ie里认为还有第三个元素是undefined.浏览器差异把。一个逗号。。。。呵呵


呵呵,的确,这也就解释了为什么{name:fornever,age:10,}可以在火狐下通过但是在IE下通不过了
12 楼 hanjs 2008-12-30  
你指定了9,是number,那么肯定可以处理的。我说的数组按其本意是只接受数字作为下标的。如果增加了string的,那么就和map差不多了,形成了key与value的形式
11 楼 sdcyst 2008-12-30  
hanjs 写道
var array = new Array("no1","no2");  
array["po"] = "props1";  
alert(array.length);   //2  
//对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此)  
alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1 

这段代码有疑问啊,为何length没有增加呢?我是这样看的。

其内部的length属性增加的时候,判断了标注,默认就是取length+1,可以上面赋值的时候制定了po,因为不是number类型,导致length没有进行加1处理。因为typeof array是object,因此只能通过 array.po访问这样添加的值.

lz,你写的这个第一篇帖子呢 javascript面向对象技术基础(一) ?我翻了好多页也没有看到,能否提供下?谢谢

不知道下面这个例子是不是和你所说的相悖:
var a = new Array();
alert(a.length); //0
a[9] = "s";
alert(a.length); //10


你看看我的博客吧,那个帖子没有人回,早不知道去哪儿了....
10 楼 hanjs 2008-12-30  
var array = new Array("no1","no2");  
array["po"] = "props1";  
alert(array.length);   //2  
//对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此)  
alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1 

这段代码有疑问啊,为何length没有增加呢?我是这样看的。

其内部的length属性增加的时候,判断了标注,默认就是取length+1,可以上面赋值的时候制定了po,因为不是number类型,导致length没有进行加1处理。因为typeof array是object,因此只能通过 array.po访问这样添加的值.

lz,你写的这个第一篇帖子呢 javascript面向对象技术基础(一) ?我翻了好多页也没有看到,能否提供下?谢谢
9 楼 sdcyst 2008-12-30  
hanjs 写道
var array = new Array("no1","no2");  
alert(array.length);//2
array["po"] = "props1";  
alert(array.length);   //2
//对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此)  
alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1 

我和sdcyst 测试的结果不一样,在ie7下增加完也是2啊。

还有,ls的说的不是很正确吧。就拿这个例子说,新增加的节点有值,不是undefined,你又怎么说呢?

能不能说的清楚点?
8 楼 hanjs 2008-12-30  
var array = new Array("no1","no2");  
alert(array.length);//2
array["po"] = "props1";  
alert(array.length);   //2
//对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此)  
alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1 

我和sdcyst 测试的结果不一样,在ie7下增加完也是2啊。

不好意思,我看错了,你测试的例子和我的不一样,你是说第一个例子,抱歉
7 楼 风雪涟漪 2008-12-26  
因为 firefox 忽略逗号后面为空的情况了。。。如 a=[1,2,] 在firefox 只有2个 ie里认为还有第三个元素是undefined.

浏览器差异把。一个逗号。。。。呵呵
6 楼 sdcyst 2008-12-26  
hite 写道

alert(array2.length);

在firefox中执行结果是2:


谢谢提醒,确实是2,在ie中是3
这个地方我还真没测试.
不过这个地方怎么解释呢?
5 楼 风雪涟漪 2008-12-26  
typeof array //Object
本身就是对象。Array就当对象来处理就好了
4 楼 hite 2008-12-26  
风雪涟漪 写道
佩服楼上的仔细,的确结果是2

用JavaScript打游击太多了,需要好好接受点系统的学习,所以就多动手
3 楼 风雪涟漪 2008-12-26  
佩服楼上的仔细,的确结果是2
2 楼 hite 2008-12-26  
alert(array2.length); //3 


在firefox中执行结果是2:

var array = new Array("no1","no2");  
array["po"] = "props1";  
alert(array.length);   //2  
//对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此)  
alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1 

这个例子太帅了(和我一样!O(∩_∩)O哈哈~):

我把 array["po"]换成array["2"]或者array[2],还有array.po换成array.“2”和array.2,发现了好多的秘密。对数组是特殊的对象有了更进一步的理解。猛赞
1 楼 FengShen_Xia 2008-12-12  
不错,学习

相关推荐

    javascript面向对象技术基础

    JavaScript是一种广泛应用于...以上是JavaScript面向对象技术的一些基础知识。通过理解并熟练运用这些概念,开发者能够编写出更清晰、更易于维护的代码。对于JavaScript初学者来说,掌握这些基础是进阶学习的关键步骤。

    javascript 面向对象技术基础教程第1/2页

    JavaScript面向对象技术是该编程语言非常核心的一个部分,它允许开发者使用对象来组织代码,并模拟现实世界中的实体。在JavaScript中,几乎所有的东西都可以被视为对象,包括基本数据类型如数字和字符串。对象包含...

    [推荐]javascript 面向对象技术基础教程

    本文将深入浅出地讲解JavaScript中的面向对象技术基础,包括对象、数组、函数、类、构造函数以及原型等方面的知识。 首先,让我们来看看对象和数组。在JavaScript中,对象是键值对的集合,这些键通常是字符串,对应...

    JAVASCRIPT 面向对象编程精要

    本文介绍了JavaScript面向对象编程的基本概念和技术细节,包括变量和对象的基础用法、函数的作用以及如何通过封装和继承来构建复杂的对象层次结构。JavaScript的独特之处在于它的灵活性和动态性,这使得它成为了一种...

    javascript面向对象编程.pdf

    总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...

    JavaScript面向对象编程指南.pdf

    通过以上内容,我们可以了解到JavaScript面向对象编程的基础知识以及它的核心概念。在实际应用中,理解并熟练运用这些知识点,将有助于开发出更加结构化和可维护的代码。同时,参与Java学习群和听讲大神的课程将是一...

    javascript面向对象编程(中文).pdf

    ### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...

    JavaScript面向对象技术实现树形控件

    JavaScript面向对象技术在实现树形控件中扮演着至关重要的角色。树形控件是一种用于展示层次型数据的用户界面元素,它具有扩展和折叠功能,可以在有限的空间内清晰地展示大量的信息,使得数据间的层级关系一目了然。...

    《JavaScript内核系列》和《JavaScript面向对象基础》

    二、JavaScript面向对象基础 JavaScript的面向对象编程主要基于原型(prototype)、构造函数和实例化。 1. 原型:JavaScript中的对象都有一个内置的__proto__属性,指向其构造函数的原型对象。通过原型链,对象可以...

    javascript 经典面向对象设计

    标题“JavaScript经典面向对象设计”指出了本书的主要内容是关于如何使用面向对象编程(OOP)原则和技术来编写高质量、可扩展且可重用的JavaScript应用程序及库。描述中提到本书相比其他中文资料更为清晰,深入到...

    JavaScript面向对象程序设计

    在JavaScript面向对象编程中,随着Web2.0和Ajax技术的普及,JavaScript的角色从简单的表单验证扩展到了复杂的数据交互和页面动态更新。采用面向对象的编程风格可以使代码结构更加清晰,便于管理和维护。例如,...

    JavaScript面向对象编程指南 第2版 高清 带索引书签目录_样章.pdf

    从所提供的文件信息中,我们可以总结以下几点与“JavaScript面向对象编程指南 第2版 高清 带索引书签目录_样章.pdf”相关的重要知识点。 首先,该文件提到的书籍是关于JavaScript面向对象编程的,面向对象编程...

    js面向对象技术基础

    JavaScript是一种基于原型的面向对象编程语言,它的面向对象技术基础包括对象、数组、原型、作用域、闭包以及模拟私有变量等核心概念。下面将详细介绍这些知识点。 **1. 对象与数组** 在JavaScript中,对象是键值...

    javascript面向对象编程

    ### JavaScript面向对象编程详解 #### 一、现代JavaScript概述 随着技术的发展,JavaScript这门语言已经从最初的简单脚本语言成长为现在广泛应用于Web前端、后端甚至桌面应用的强大编程工具。现代JavaScript具备...

Global site tag (gtag.js) - Google Analytics