簡體   English   中英

JavaScript中的這個東西是什么?

[英]what is this thing in JavaScript?

var something = {

wtf: null,
omg: null
};

自從我上次編程以來,我的JavaScript知識仍然非常不完整,但我想我現在已經重新學習了大部分內容。 除此之外。 我記不起以前見過這個。 它是什么? 我在哪里可以了解更多相關信息?

它是對象文字語法。 'wft'和'omg'是屬性名稱,而null和null是屬性值。

它相當於:

var something = new Object();
something.wtf = null;
something.omg = null;

查看有關對象文字的mozilla文檔: http//developer.mozilla.org/En/Core_JavaScript_1.5_GuideLiterals#Object_Literals

它是一個具有兩個屬性的對象文字。 通常這是人們創建關聯數組或散列的方式,因為JS本身不支持該數據結構。 雖然注意它仍然是一個完全成熟的對象,你甚至可以添加函數作為屬性:

var myobj = {
    name: 'SO',
    hello: function() {
        alert(this.name);
    }
};

您可以使用for循環遍歷屬性:

for (i in myobj) {
    // myobj[i]
    // Using the brackets (myobj['name']) is the same as using a dot (myobj.name)
}

來自“我想在Javascript中使用關聯數組”的觀點(在很多情況下,最終會使用對象文字)

來自“掌握Javascript陣列”

關聯數組是一個使用字符串而不是數字作為索引的數組。

var normalArray    = [];
    normalArray[1] = 'This is an enumerated array';

    alert(normalArray[1]);   // outputs: This is an enumerated array

var associativeArray           = [];
    associativeArray['person'] = 'John Smith';

    alert(associativeArray['person']); // outputs: John Smith   

Javascript沒有,也不支持關聯數組。 但是... Javascript中的所有數組都是對象,Javascript的對象語法提供了關聯數組的基本模擬。 出於這個原因,上面的示例代碼實際上將起作用。 請注意,這不是一個真正的陣列,如果您嘗試使用它,它會有真正的陷阱。 示例中的'person'元素成為Array對象的屬性和方法的一部分,就像.length,.sort(),。splice()和所有其他內置屬性和方法一樣。

您可以使用以下循環遍歷對象的屬性...

var associativeArray = [];
associativeArray["one"] = "First";
associativeArray["two"] = "Second";
associativeArray["three"] = "Third";
for (i in associativeArray) { 
   document.writeln(i+':'+associativeArray[i]+', '); 
   // outputs: one:First, two:Second, three:Third
};

在上面的例子中,associativeArray.length將為零,因為我們實際上沒有將任何內容放入Array中,我們將它放入associativeArray的對象中。 associativeArray [0]將是未定義的。

上面示例中的循環還將獲取已添加到數組中的任何方法,屬性和原型,而不僅僅是數據。 人們對Prototype庫的許多問題是它們的關聯數組會破壞,因為Prototype會向Array對象添加一些有用的Prototype函數,而對於x循環中的i,會選擇其他方法。 這就是使用Array / objects作為窮人的關聯數組的一個小問題。

作為最后一個示例,無論您將associativeArray定義為Array([)),Object({}),Regular Expression(//),String(“”)還是任何其他Javascript對象,前面的代碼都將起作用。

底線是 - 不要嘗試使用關聯數組,代碼是什么 - 對象屬性,而不是數組。

它是一個Object文字 (或者有時候是帶有Hash類的庫中的vanilla對象 )。

同樣的事情:

var o = new Object();
o.wtf = null;
o.omg = null;

這是一個對象文字。 它實際上等同於以下內容:

var something = new Object();
something["wtf"] = null;
something["omg"] = null;

我相信它是一個具有2個屬性的對象,WTF和OMG。

你可以說

something.wtf = "myMessage";
alert(something.wtf);

看看JSON.ORG

這段代碼:

var something = {wtf:null}

具有相同的效果:

var something={};
something.wtf=null;

或者為了不必要的冗長:

var something=new Object();
something.wtf=null;

記住最后一行與之相同是有用的

something["wtf"]=null;

所以你可以使用:

var myName="wtf";
something[myName]=null;

這是內聯JavaScript對象實例化的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM