2017-01-22 1 views
0

Есть элементы ['a', 'b', 'c'] массив ссылочный объект o ключи? Или это новые экземпляры строк?Ли Object.keys копирует имена свойств по ссылке или создает новую строку?

let o = {a: 10, b: 20, c: 30}; 
let keys = Object.keys(o); // ['a', 'b', 'c'] 
+1

Они просто строковые значения, примитивный тип, а не объект. –

+0

@ Y.C., Да, но не для 'реакция-редукция'. Он считает их изменчивыми как-то и перезагружает компоненты. – Green

ответ

1

Если они были ссылками, изменение одного из них в массиве keys также привело бы к изменению имени свойства объекта. Как вы можете видеть здесь, это не так.

let o = {a: 10, b: 20, c: 30}; 
 
let keys = Object.keys(o); // ['a', 'b', 'c'] 
 
keys[0]='d'; 
 
let keys2 = Object.keys(o); 
 
console.log(keys2);

+0

Правда. Однако, это странно. Я обнаружил, что 'React Redux' рассматривает ключи объектов, изменяемые в этой операции, и перезагружает компоненты. Вот почему я задаю вопрос. – Green

+0

@Green, в вашем вопросе нет «Реагировать» и «Редюкс». В этом случае свойства, на которые вы ссылаетесь, определяются методами setter и getter, определенными [дескриптором свойства] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/ defineProperty). –

1

Как вы можете прочитать о Object.keys метод here:

В Object.keys() возвращает массив собственных перечислимых свойств заданного объекта, в том же порядке, что обеспечивается для ... in loop (разница в том, что цикл for-in перечисляет свойства в цепочке прототипов).

Итак, вы задаете вопрос, Свойства объекта Object.keys по ссылке или создать новый объект?, не связано с тем, что делает этот метод. Этот метод не копирует свойства. Как упоминалось выше, возвращает массив, который содержит имя собственных перечислимых свойств объекта.

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

  • Нет связанных вопросов^_^