Для / в пробем. В чем разница между object.variable и object [variable]? - PullRequest
0 голосов
/ 19 апреля 2020

Почему мы можем использовать код, подобный следующему:

     let student = {name:"John", surname:"Doe", index:386754}; 
     let text = "";
     let x;
     for (x in student) {
     text += student[x] + " ";   }

И это будет предварительный просмотр: Джон Доу 386754.

Но когда я сформулировал его так:

     let student = {name:"John", surname:"Doe", index:386754}; 
     let text = "";
     let x;
     for (x in student) {
     text += student.x + " ";   }

, возвращается: не определено не определено не определено.

Полагаю, это довольно просто c, но мне пришлось спросить, потому что я не могу найти подходящий ответ. Спасибо вперед!

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Использование object.something против object[something] варьируется в зависимости от языка, и JavaScript особенно неэффективен в этом аспекте. Большая разница здесь в том, что в object[something], something должна ссылаться на строку, соответствующую ключу в object. Таким образом, если бы у вас было something = 'myKey', а myKey было именем ключа в something (то есть object = {'myKey': 'value', ...}), вы бы получили value. Если вы используете object.something, вы просите JavaScript найти ключ в object с именем что-то. Даже если вы пишете something = 'myKey', использование точки означает, что вы смотрите в рамках объекта, делая переменные в вашей программе эффективно невидимыми.

Поэтому, когда вы пишете student.x, вы получаете неопределенное значение, потому что для вашей программы нет ключа 'x': 'value' в student. Определение x в качестве ключа для l oop не меняет этого. С другой стороны, написание student[x] означает, что ваша программа находит значение x, ссылается и подключает его. Когда x равно 'name', программа фактически ищет student['name'].

Надеюсь, это прояснит вашу проблему. Удачи!

0 голосов
/ 19 апреля 2020

Вы должны проверить структуры данных. Вы создаете таблицу ha sh, используя переменную student. Таким образом, вы можете вызывать внутренние переменные (пары ключ-значение), используя скобки, как вы это делали student[name]. Второй student.name означает, что вы вызываете метод класса, которого у вас нет.

Я рекомендую вам проверить, какие структуры данных существуют и как их использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...