论坛首页 Web前端技术论坛

JavaScript内核系列 第5章 数组

浏览 19246 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-04-25  
s79 写道
引用
另一个与其他语言的数组不同的是,字符串也可以作为数组的下标……


这句话容易误导初学者。建议更正。


是呀,这时候已经不是下标了吧. 而是对象的属性?
0 请登录后投票
   发表时间:2010-04-25  
不错 不错 全部复制走
0 请登录后投票
   发表时间:2010-04-25   最后修改:2010-04-25
yuyue618 写道
s79 写道
引用
另一个与其他语言的数组不同的是,字符串也可以作为数组的下标……


这句话容易误导初学者。建议更正。


是呀,这时候已经不是下标了吧. 而是对象的属性?


看怎么理解了,用字符串作为下标可称为关联数组。

数组分类:

1、从数组的下标分为索引数组、关联数组

2、从对数据的存储分为静态数组、动态数组

js的数组同时属于索引数组和动态数组,本质上它就是一个对象,js的索引数组并非“连续分配”内存的,因此索引方式并不会带来很高的效率。而c,c++,java中的数组则是连续分配内存的,如果按照c,c++,java中数组的理解,那么js中的关联数组不能称为数组,即使是js中的Array也不能称为数组,因为Array只是具有索引数字,但并非“连续分配”内存的。
0 请登录后投票
   发表时间:2010-04-25  
yuyue618 写道
s79 写道
引用
另一个与其他语言的数组不同的是,字符串也可以作为数组的下标……


这句话容易误导初学者。建议更正。


是呀,这时候已经不是下标了吧. 而是对象的属性?


事实上,在JavaScript里,不存在数字下标这个传统上的东西,数字下标和字符串下标都是“JavaScript数组”这种特殊对象的属性,比如:

var array = ["first", "second", "third"];
print(array["0"]);//以字符串0为下标
print(array[0]);//以数字0为下标


会得到相同的结果:

引用

first
first


JavaScript数组其实是将数字转化成字符串,然后将这个字符串作为“数组”对象的属性来进行存取的。说白了,在存取属性上,它跟其他的对象并无二致。
0 请登录后投票
   发表时间:2010-04-25   最后修改:2010-04-25
abruzzi 写道
yuyue618 写道
s79 写道
引用
另一个与其他语言的数组不同的是,字符串也可以作为数组的下标……


这句话容易误导初学者。建议更正。


是呀,这时候已经不是下标了吧. 而是对象的属性?


事实上,在JavaScript里,不存在数字下标这个传统上的东西,数字下标和字符串下标都是“JavaScript数组”这种特殊对象的属性,比如:

var array = ["first", "second", "third"];
print(array["0"]);//以字符串0为下标
print(array[0]);//以数字0为下标


会得到相同的结果:

引用

first
first


JavaScript数组其实是将数字转化成字符串,然后将这个字符串作为“数组”对象的属性来进行存取的。说白了,在存取属性上,它跟其他的对象并无二致。


呵,数组的数字索引看起来像其它语言的索引,但实际上它会隐式的转换成字符串。亦可参考
http://snandy.iteye.com/blog/284805
http://snandy.iteye.com/blog/407351



0 请登录后投票
   发表时间:2010-04-25  
zhouyrt 写道


呵,数组的数字索引看起来像其它语言的索引,但实际上它会隐式的转换成字符串。亦可参考
http://snandy.iteye.com/blog/284805
http://snandy.iteye.com/blog/407351


嗯,不错,用一个for..in就可以看到了。JavaScript的数组本质上还是键-值这样的形式,而不是一个连续的内存块(C/Java中都是连续的),而是一个散列表。
0 请登录后投票
   发表时间:2010-04-25  
介绍下sort()函数的用法吧(这个问的有点弱了
0 请登录后投票
   发表时间:2010-04-25  
length修改后会影响数组的实际大小,这个得提一下
0 请登录后投票
   发表时间:2010-04-25  
hyj1254 写道
介绍下sort()函数的用法吧(这个问的有点弱了


好的,我在最后加一小节,先整理下,随后再贴上来。
0 请登录后投票
   发表时间:2010-04-25  
cryolite 写道
length修改后会影响数组的实际大小,这个得提一下

本来准备在5.1小节上讲的,结果举的例子少些了些东西:
var array = new Array(1, 2, 3, 4, 5);  
print(array.length);  
array.length = 3;  
print(array.length);
 
 
运行结果为:

引用

5
3
1,2,3


不知道大家有没有注意到这个1,2,3,其实这个就是修改了length属性之后执行print(array)语句的运行结果,可能排版的时候给删掉了,不好意思。我再修改下。 
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics