Разница между точечной нотацией и обозначением скобки в 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]);
}