2015-04-27 4 views
1

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

+0

Это заявление не вызывает проблем. Что случилось, точно? Я посмотрю, смогу ли я с этим помочь. –

+0

Не могли бы вы принять ответ, если кто-нибудь из них помог? –

ответ

1

Это создает объект:

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

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

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

+1

На самом деле, существует '3' между 0 и 6. –

+0

Отредактировано спасибо @QPaysTaxes –

+1

Всегда готов помочь кому-то лучше ответить, чем мой, и украсть все мои реплики! ;) Это напоминает мне - вы получите доступ к нумерованным свойствам с помощью 'obj [_]', а не 'obj._'. –

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]||''); 

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

1

Это объект 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.

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

+1

Пожалуйста, добавьте соответствующую выдержку из бит, который вы связали. Как есть, ваш ответ _severely_ отсутствует - что произойдет, если эта ссылка погибнет? –

+0

Я думал, что связь будет расширяться автоматически, но, видимо, мне пришлось «одобрить» эту функциональность. AJ, спасибо за подсказку. –

+0

@ Алан, вы должны были одобрить мое редактирование, которое расширило ссылку и исказило текст. Он не знает автоматически, что вставить. Также он не знает, как отформатировать его. В будущем, пожалуйста, сделайте это сами - пока это не так сложно, это боль в прикладе. –

Смежные вопросы