iT邦幫忙

0

javascript object物件{}怎麼變成陣列?

有專家達人知道
假如有一個 dom物件是這樣
obj={
a:123,
b:"in",
c:function(){},
d:this.length,
e:a //定義不合法 why?
}
要把它變成陣列
有沒指令 或方法可以
可以把牠用逗號 依序變成一個陣列呢?
splict 只能處理字串 不能用

另外d:this.length 指的是什麼
我alert結果是 0

還有就是e:a ..為什麼什麼這樣定義不合法
a=123 ,e=a . e怎麼不能是 123 ?
那在 obj裡面的各個變數跟變數值
要怎麼互傳呢?

另外陣列要怎麼變成 物件?

1 個回答

8
wiseguy
iT邦超人 1 級 ‧ 2012-12-29 10:52:29
最佳解答
  1. 你定義的那個 obj 就叫物件,不是 DOM 物件。
  2. d:this.length 指的是你寫錯。物件定義沒有 this 參考,物件也沒有 length 屬性。
  3. e:a 為什麼這樣定義不合法?因為你沒定義 a,前面在加個 a=new Object; 就可以了。不過如果你是想要 obj.a 的話,不行,程式跑到那行時 obj 還在定義中,是不能參考裡面的屬性的。
  4. obj裡面的各個變數跟變數值要怎麼互傳?obj 定義完再說。
  5. 物件轉陣列:
    ary = new Array();
    for(x in obj) ary[ary.length]=x;
    ary 就是你要的陣列了。
wordsmith iT邦高手 1 級 ‧ 2012-12-29 12:23:34 檢舉

e:a

用意應該是要存取obj的a屬性吧?雖然不知道在沒有任何加工的情況,為什麼要指定a屬性給e,但是如果真的要做的話,可以像這樣

<pre class="c" name="code">e:function(){
  return this.a;
}

如此一來,使用 obj.e(),就可以取得a值。

像這種用法,比較合理的用法像是:

<pre class="c" name="code">var person = {
  firstName:'Bill',
  lastName:'Evans',
  fullName: function(){
    return this.firstName + " " + this.lastName;
  }
}

如此一來,就可以在定義時,存取物件的屬性。

wiseguy iT邦超人 1 級 ‧ 2012-12-30 11:42:26 檢舉

可以很正常執行:

<pre class="c" name="code"><script>
obj={
a:123,
e:function(){return this.a;}
};

alert(obj.e());
</script>

我要發表回答

立即登入回答