Что означают фигурные скобки в объявлении переменной?

Что делают фигурные скобки ({}) делать в объявлениях переменных, когда окружает несколько пар вида integer:string?

Например, что они здесь значат?

char = {0:'(',3:') ',6:' - '};

В данном случае это из следующего сценария форматирования номера телефона:

function formatPhone(obj) {
    var numbers = obj.value.replace(/\D/g, ''),
    char = {0:'(',3:') ',6:' - '};
    obj.value = '';
    for (var i = 0; i < numbers.length; i++) {
        obj.value += (char[i]||'') + numbers[i];
    }
}

Я считаю, что линия, определяющая char это тот, который заставляет его терпеть неудачу.

3 ответа

Это объект Javascript. Лучше с отступом, это будет выглядеть так:

char = {
    0: '(',
    3: ') ',
    6: ' - '
}

Это говорит о том, что вы делаете объект со свойствами 0, 3, а также 6 установить на заданные значения. Затем свойства доступны с char[i], который возвращает null если свойство не определено - так для всех i кроме 0, 3 и 6, по умолчанию '', Для 0, 3 и 6 это займет соответствующие строки.

Хорошо, я думаю, что выяснил, что "не работает", хотя, опять же, мне нужно, чтобы вы объяснили, что это значит, прежде чем я смогу быть уверенным.

Эта строка:

obj.value += (char[i]||'') + numbers[i];

вставит undefined в строке, если numbers[i] не определено, и numbers[i] определяется только для i = 0, 3 или 6. Измените строку на следующую:

obj.value += (char[i]||'') + (numbers[i]||'');

и это должно работать.

Создает объект:

obj = {0:'(',3:') ',6:' - '};

У вас есть два элемента внутри вашего объекта с ключами 0, 3 и 6. Вы можете получить к ним доступ obj[0], obj[3] и obj[6]

Или вы можете получить к ним доступ в цикле, как вы сделали в своем примере

Это объект Javascript.

Помимо создания объектов с помощью функции конструктора, вы можете создавать объекты с помощью инициализатора объектов. Использование инициализаторов объектов иногда называют созданием объектов с буквенной нотацией. "Инициализатор объекта" соответствует терминологии, используемой C++.

Синтаксис для объекта, использующего инициализатор объекта:

var obj = { property_1:   value_1,   // property_# may be an identifier...
            2:            value_2,   // or a number...
            // ...,
            "property n": value_n }; // or a string

где obj - имя нового объекта, каждый property_i является идентификатором (имя, число или строковый литерал), и каждый value_i это выражение, значение которого присваивается property_i,

Остальная часть этой статьи доступна здесь.

Другие вопросы по тегам