سؤال

var something = {

wtf: null,
omg: null
};

لا تزال معرفتي JavaScript غير مكتملة بشكل فظيع منذ آخر برمجتها معها ، لكنني أعتقد أنني تعلمت معظمها الآن. باستثناء هذا. لا أتذكر رؤية هذا من قبل. ما هذا؟ وأين يمكنني معرفة المزيد عنها؟

هل كانت مفيدة؟

المحلول

إنه كائن حرفي مع خصائصين. عادةً ما تكون هذه هي الطريقة التي يقوم بها الأشخاص بإنشاء صفائف أو تجزئة لأن JS لا يدعم بنية البيانات هذه. على الرغم من ملاحظة أنه لا يزال كائنًا كاملًا ، يمكنك حتى إضافة وظائف كخصائص:

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

ويمكنك التكرار من خلال الخصائص باستخدام حلقة:

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

نصائح أخرى

إنه كائن بناء الجملة الحرفي. "WFT" و "OMG" هما أسماء خاصية في حين أن Null و Null هما قيم العقار.

يعادل:

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

تحقق من وثائق Mozilla على حرفي الكائن: http://developer.mozilla.org/en/core_javascript_1.5_guide:literals#object_literals

Explanation من وجهة نظر "أريد مجموعة نقاطية في جافا سكريبت" (وهو ما ينتهي به الأمر في كثير من الحالات إلى استخدام الحرفيين الكائنات)

من "إتقان صفائف جافا سكريبت"

صفيف ترابط هو صفيف يستخدم سلسلة بدلاً من رقم كفهرس.

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 مضاهاة أساسية لمصفوقة نقاطية. لهذا السبب ، سيعمل رمز المثال أعلاه بالفعل. كن حذرًا من أن هذه ليست صفيفًا حقيقيًا ولديها مضادات حقيقية إذا حاولت استخدامها. يصبح عنصر "الشخص" في المثال جزءًا من خصائص وطرق كائن الصفيف ، تمامًا مثل .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 صفرًا لأننا لم نضع أي شيء في الصفيف ، حيث نضعه في كائن AssociAtiveArray. لن يتم تعريف AssociAtiveArray [0].

ستقوم الحلقة في المثال أعلاه أيضًا بتقاط أي طرق وخصائص ونماذج أولية تمت إضافتها إلى الصفيف وليس فقط بياناتك. هناك الكثير من المشكلات التي يواجهها الأشخاص مع مكتبة النموذج الأولي هو أن صفائفهم الترابطية تكسر لأن النموذج الأولي يضيف بعض وظائف النموذج الأولي المفيدة إلى كائن الصفيف وللحلقات في X تلتقط تلك الطرق الإضافية. هذا هو pitfal لاستخدام الصفيف/الأشياء كصفيف ترابط رجل فقير.

كمثال نهائي ، سيعمل الكود السابق بغض النظر عما إذا كنت تحدد AssociAtiveArray كصفيف ([]) أو كائن ({}) أو تعبير منتظم (//) أو سلسلة ("") أو أي كائن JavaScript آخر .

خلاصة القول هي - لا تحاول استخدام المصفوفات الترابطية ، رمز لما هي - خصائص الكائن ، وليس المصفوفات.

انه كائن حرفي (أو ، في بعض الأحيان ، أ كائن الفانيليا في المكتبات مع فصول التجزئة).

نفس الشيء مثل:

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

هذا هو كائن حرفي. إنها مكافئة بشكل فعال لما يلي:

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

أعتقد أنه كائن له خصائص ، 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 مع الإسناد
لا تنتمي إلى StackOverflow
scroll top