Вопрос

var something = {

wtf: null,
omg: null
};

Мои знания JavaScript по-прежнему ужасны, с тех пор как я последний раз программировал их, но я думаю, что теперь я переучил большинство из них. За исключением этого. Я не помню, чтобы когда-либо видел это раньше. Что это? И где я могу узнать больше об этом?

Это было полезно?

Решение

Это литерал объекта с двумя свойствами. Обычно так люди создают ассоциативные массивы или хэши, потому что 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)
}

Другие советы

Это буквальный синтаксис объекта. «Wft» и «omg» - это имена свойств, а «null» и «null» - значения свойств.

Это эквивалентно:

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

Ознакомьтесь с документацией mozilla по литералам объектов: http: //developer.mozilla. орг / En / Core_JavaScript_1.5_Guide: литералы # Object_Literals

Объяснение из раздела "Я хочу ассоциативный массив в 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 не имеет и не поддерживает ассоциативные массивы. Однако & # 8230; Все массивы в Javascript являются объектами, а синтаксис объектов Javascript дает базовую эмуляцию ассоциативного массива. По этой причине приведенный выше пример кода действительно будет работать. Имейте в виду, что это не настоящий массив и в нем есть реальные подводные камни, если вы попытаетесь его использовать. Элемент person в этом примере становится частью свойств и методов объекта Array, как и .length, .sort (), .splice () и все другие встроенные свойства и методы.

Вы можете просмотреть свойства объекта с помощью следующего цикла & # 8230;

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
};

В приведенном выше примере значение ассоциативного массива будет равно нулю, потому что мы на самом деле ничего не помещали в массив, мы помещаем его в объект ассоциативного массива. ассоциативный массив [0] будет неопределенным.

Цикл в вышеприведенном примере также выбирает любые методы, свойства и прототипы, которые были добавлены в массив, а не только ваши данные. Многие проблемы, с которыми сталкиваются люди с библиотекой Prototype, заключаются в том, что их ассоциативные массивы ломаются, потому что Prototype добавляет несколько полезных функций Prototype к объекту Array, и для циклов i in x выбираются эти дополнительные методы. В этом и заключается смысл использования массива / объектов в качестве ассоциативного массива бедняка.

В качестве последнего примера предыдущий код будет работать независимо от того, определите ли вы ассоциативный массив как массив ([]), объект ({}), регулярное выражение (//), строка (" "), или любой другой объект Javascript.

Суть в том, что не пытайтесь использовать ассоциативные массивы, используйте код для того, чем они являются - свойства объекта, а не массивы.

Это объектный литерал (или иногда ванильный объект в библиотеках с классами Hash).

То же самое, что и

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 с атрибуция
Не связан с StackOverflow
scroll top