Что означают фигурные скобки в объявлении переменной?
Что делают фигурные скобки ({}
) делать в объявлениях переменных, когда окружает несколько пар вида 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
,
Остальная часть этой статьи доступна здесь.