У меня есть этот jQuery:
$.post(document.URL, {'blanks':word});
$.post(document.URL, {'blanks':{ word :{'time':T}}});
И это результат, когда я регистрирую его в терминале:
{ blanks: 'plotted' }
{ blanks: { word: { time: '1386984059685' } } }
Почему переменное word
не изменяется во втором выражении jQuery? Я предполагаю, что это имеет какое-то отношение к одинарным кавычкам, добавляемым к имени ключа, но я не мог понять, как работать.
Я решил проблему с
$.post(document.URL, {'blanks':{'word':word, 'time':T}});
в результате чего
{ blanks: { word: 'plotted', time: '1386984409890' } }
Но мне было любопытно, почему переменная не изменилась, когда это был ключ, и если бы был способ сделать это?
Если вы заранее определите свои данные, вы можете сделать это:
var someVar = 'foo';
var data = {};
data[someVar] = 'My key is "foo"';
console.log(data.foo);
console.log(data[someVar]);
console.log(data['foo']);
Все они будут регистрироваться. My key is "foo"
Когда вы создаете объект, подобный этому {prop: 'value'}
Имя свойства не может быть переменной - то, что вы вводите, - это то, что вы получаете. Кавычки являются необязательными, если вы не используете символы, которые в противном случае вызывают ошибку. То же самое касается доступа к свойствам с точечной записью, например: myObj.propName.anotherPropName
.
Нотация нот более гибкая, поскольку вы можете получить доступ к другим недопустимым именам свойств, а также использовать переменные для установки и доступа к свойствам.
var myObj = {
'@##%$#%%^&%' : 'some value'
};
console.log(myObj['@##%$#%%^&%']); //logs "some value"