Что представляет собой двоеточие (:) в JavaScript?

Это, вероятно, глупый вопрос нообата, но что они представляют: в следующем контексте:

var stuffToDo = {
    'bar' : function() {
        alert('the value was bar -- yay!');
    },

    'baz' : function() {
        alert('boo baz :(');
    },

    'default' : function() {
        alert('everything else is just ok');
    }
};

if (stuffToDo[foo]) {
    stuffToDo[foo]();
} else {
    stuffToDo['default']();
}

Сохраняется ли функция для каждой из этих переменных?

Ответы

Ответ 1

Это литерал объекта [MDN]:

var obj = {
    key: value
};

// obj.key === value; // true

Он присваивает value свойству key of obj. Хотя нет ограничений для того, что может быть value (ну, это должно быть что-то назначаемое), существуют ограничения для key: это должно быть либо имя идентификатора, строковый литерал или числовой литерал.

Более подробную информацию можно найти в разделе 11.1.5 спецификации ECMAScript.

Литеральное обозначение похоже на:

var stuffToDo = {}; // <-- empty object literal

stuffToDo.bar = function() {...};
// or stuffToDo['bar'] = ...

stuffToDo.baz = function() {...};
// or stuffToDo['baz'] = ...

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

Это не сработает:

var obj = {
    foo: value,
    bar: obj.foo
};

тогда как это делает:

var obj = {};
obj.foo = value;
obj.bar = obj.foo;

Для полноты есть два других использования двоеточий в JavaScript: