記得是在看<<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]通過爭論學習