记得是在看<<javascript dom编程艺术>>,发现的一些平时我没有用过的javascript 数组用法。发到群里和网友讨论,发现其实还真不是我们表面看到的一样,唉,的确该多交流啊。

2007-07-05 16:39:03 -274°C(51411970)
感觉js数组好强啊
a =[1,2,3];
var test = Array(3);
test["no"]="111";
test["name"]="zhang3";
test["age"]="23";
这样写和java里的hashmap一样,键值相对。

2007-07-05 16:41:36 Hibernate(*)
[:L]

2007-07-05 16:41:47 -274°C(51411970)
[?]

2007-07-05 16:41:55 Hibernate(*)
呵呵

2007-07-05 16:45:05 *(******)
js的数组如果那样写是不对的

2007-07-05 16:45:27 *(******)
看起来你添加了3个字符串,你看看你的test.length返回多少

2007-07-05 16:45:57 *(******)
你再添加多一些字符串,看看test.length 返回多少

2007-07-05 16:46:29 *(******)
test['no']这种形式,只能是对数组对象加了一个no的属性

2007-07-05 16:47:27 *(******)
这时候数组对象和普通的对象没有区别,你用var obj = new Object(); obj['no'] = 'xxxxx';

2007-07-05 16:47:32 *(******)
其实是一样的

……(省略部分争吵)

2007-07-05 16:55:04 -274°C(51411970)
返回的是数组的长度

2007-07-05 16:55:40 *(******)
不相信你就用下面的代码测试
var a = new Array();
a['aa'] = 355;
a['bb'] = 444;
a['cc'] = 'xxxxx';
alert(a.length);
 

2007-07-05 16:56:12 -274°C(51411970)
你不信你就自己测试:
var test = Array(3);
test["no"]="111";
test["name"]="zhang3";
test["age"]="23";

alert("test.length"+test.length);

2007-07-05 16:56:45 *(******)
大哥,你已经定义了数组是3了,我还能说什么
 

2007-07-05 16:56:54 *(******)
你多添加一个元素试试就知道了
 

2007-07-05 16:57:22 -274°C(51411970)
定了长度了!
 

2007-07-05 16:58:12 *(******)
非也,其实你定了3个长度的数组,而你只往数组对象上添加属性了,数组里一个元素也没有,3个都是空元素

2007-07-05 16:58:45 *(******)
另一个测试方法

2007-07-05 16:59:47 *(******)
test["clickEvent"] = function() {alert(123);};
test.clickEvent();

2007-07-05 16:59:58 *(******)
还可以添加函数呢
 

2007-07-05 17:00:22 *(******)
其实就是把函数或属性动态添加到数组对象上了

2007-07-05 17:01:49 -274°C(51411970)
你不能说是错的

2007-07-05 17:02:03 -274°C(51411970)
/*
a =[1,2,3];
var test = Array(3);
test["no"]="111";
test["name"]="zhang3";
test["age"]="23";

alert("test.length"+test.length);
for(i in test)
{
 alert(i+":"+test[i]);
}
*/
 

2007-07-05 17:02:15 -274°C(51411970)
一样不影响你应用吧

2007-07-05 17:02:34 -274°C(51411970)
相反我觉得更方便了

2007-07-05 17:02:40 *(******)
不要用in来遍历数组,in是用来遍历对象的

2007-07-05 17:02:53 -274°C(51411970)
数组 难道不是对象?

2007-07-05 17:03:29 -274°C(51411970)
你应该把他习惯看作是对象

2007-07-05 17:04:12 *(******)
是呀,但是in有副作用,对于对象来说,比如HTMLElement,会把所有的属性和方法都遍历出来

2007-07-05 17:05:02 流水逝(542816718)
都是牛人  只是你们讨论的我看不懂

2007-07-05 17:05:03 -274°C(51411970)
那用在我这里,有副作用吗?

2007-07-05 17:05:30 *(******)
小心用in,多看看Prototype类库

2007-07-05 17:05:42 *(******)
in多是在复制对象是使用,一般不使用

2007-07-05 17:06:16 -274°C(51411970)
哦,这个我到没有得到考证。

2007-07-05 17:06:37 -274°C(51411970)
不过你说的那个情况,我的确没有预料到。

2007-07-05 17:07:12 *(******)
由于in可以遍历对象的所有属性和方法,所以Prototype库中有个Object.clone()方法,改方法就是使用in的特性来复制对象

2007-07-05 17:07:17 -274°C(51411970)
你说我用in遍历数组时候,会把他所有元素都搞出来

2007-07-05 17:07:29 -274°C(51411970)
我相信

2007-07-05 17:07:54 -274°C(51411970)
只是不好理解把他所有方法都搞出来

2007-07-05 17:08:43 *(******)
数组好像是个特例

2007-07-05 17:08:48 -274°C(51411970)
数组也是对象吧。他也有许多方法。。。

2007-07-05 17:08:51 -274°C(51411970)
呵呵

2007-07-05 17:09:11 -274°C(51411970)
这正是我刚才觉得搞笑的地方。

2007-07-05 17:09:11 *(******)
是的,但是为何偏偏是数组不把所有的属性和方法遍历出来,我还没有找到原因

2007-07-05 17:10:07 *(******)
但是通过test["xxx"] = "aaa"这种方式就以为往数组里添加了新元素是不正确的理解,因为元素没有添加到数组里,数组的长度也没有发生变化

2007-07-05 17:11:00 -274°C(51411970)
把数组看做对象集合

2007-07-05 17:11:45 *(******)
如果你不需要length也可以这么使用,我只是提醒大家不要被数组这种特性说误导,因为以前我做的项目里就被它误导过

2007-07-05 17:13:01 -274°C(51411970)
对象集合 变化就ok 了。
不过通过这次争论,还是有所收获。[share]

2007-07-05 17:13:26 -274°C(51411970)
至少你不说,我还真以为你的例子返回是3

2007-07-05 17:13:41 *(******)
[share]通过争论学习

 

posted on 2007-07-13 23:18 -274°C 阅读(550) 评论(1)  编辑  收藏 所属分类: web前端


FeedBack:
# re: 和网友关于javascript数组的讨论[未登录]
2007-07-14 14:41 | 闲耘
呵呵。理解对象先。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

常用链接

留言簿(21)

随笔分类(265)

随笔档案(242)

相册

JAVA网站

关注的Blog

搜索

  •  

积分与排名

  • 积分 - 909109
  • 排名 - 40

最新评论