Разница между точечной нотацией и обозначением скобки в javascript
Я пытаюсь понять разницу между обозначениями .Notation
и []
. В моей проблеме ниже, когда я использую if (object[key] === true)
, я получаю правильный ответ. Когда я использую if (object.key === true)
, он не работает. Может ли кто-нибудь объяснить, почему он отличается.
var myObj = {
one: false,
two: false,
three: false,
four: true,
five: false,
six: false
};
var myFunc = function (object) {
for (var key in object) {
if (object[key] === true) {
return "There is a true value in this object";
} else {
}
}
return "Sorry, there are no true values in this object";
};
Ответы
Ответ 1
При использовании точечной нотации key
означает фактическое свойство объекта, которого там не будет. Итак, возвращается undefined
, не равное true
.
Когда вы используете нотацию []
, вы получаете доступ к свойству в объекте с именем в переменной key
. Итак, это сработает.
Например,
var myObj = {
myVar : 1
};
for (var key in myObj) {
console.log(key);
console.log(myObj.key);
console.log(myObj[key]);
}
Это напечатает,
myVar
undefined
1
Поскольку myObj
не имеет члена с именем key
(myObj.key
пытается получить член с именем key
), а в следующем случае myObj
имеет член с именем myVar
( пытается получить член со значением в key
).
Точечная нотация
jslint предпочитает точечную нотацию.
[] Обозначение
Это обеспечивает гибкость. Вы можете динамически обращаться к членам с переменной.
Ответ 2
Точечная запись быстрее записывается и читается.
Обозначение квадратной скобки позволяет получить доступ к свойствам, содержащим специальные символы и выбор свойств с использованием переменных.
<form id="myForm">
<div><label>
<input type="checkbox" name="foo[]" value="1"> 1
</label></div>
<div><label>
<input type="checkbox" name="foo[]" value="2"> 2
</label></div>
<div><label>
<input type="checkbox" name="foo[]" value="3"> 3
</label></div>
</form>
Пример с ошибками:
var inputs = myForm.foo[];
Обозначение квадратной скобки, с другой стороны, позволяет:
var inputs = myForm["foo[]"];
Поскольку квадратные скобки являются частью строки, их особое значение не применяется. Второе преимущество обозначения квадратной скобки - это дело с именами переменных переменных.
for (var i = 0; i < 10; i++) {
doSomething(myForm["myControlNumber" + i]);
}