2016-05-30 3 views
9

Когда я запускаю следующий кодПочему Object.keys это возвращает массив строки вместо массива чисел

var obj = { 0: 'a', 1: 'b', 2: 'c' }; 
typeof Object.keys(obj)[0] //returns string 

В obj объекта Я создаю цифровые клавиши.

Любая причина, почему ее строка, а не number?

+2

Вы не можете иметь цифровые клавиши для свойств объекта. Свойства объекта всегда являются строками. –

+0

, если вам нужны цифры в качестве ключей, используйте ES2015 'Map' – rand

+0

Но мы можем сделать' obj [0] 'также, где' 0' - это номер, Я просто хочу знать какую-либо конкретную причину, по которой они обрабатывались таким образом – JagsSparrow

ответ

4

Поскольку Object.keys возвращает массив со строками

Object.keys() возвращает массив, элементы которого представляют собой строки, соответствующие перечислимое свойства, найденные непосредственно на объекте. Заказ свойств такой же, как и задание путем циклического изменения свойств объекта вручную.

Вы получаете массив строк, потому что Property names являются строками по определению.

Имена объектов должны быть строками. Это означает, что нестроковые объекты не могут использоваться в качестве ключей в объекте. Любой нестроковый объект, включая число, вводится в строку с помощью метода toString.

+0

@pvg, а * 'toString' не является литой, он возвращает строковое представление любой объект. Включение строк. * Верно, mdn, указанное выше. –

+1

А теперь это имеет смысл в качестве цитаты. Это все равно, несмотря на происхождение MDN, совершенно неверно, это конверсия, а не актерская форма даже без придирчивой жалобы, что «typecasted» не является грамматически правильным английским. – pvg

2

В соответствии с документацией Object.keys() возвращает строку массива

Object.keys() возвращает массив, элементы которого являются строки соответствующих перечислимых свойств найдены непосредственно на объекте. Упорядочение свойств та же, что и дает цикл по свойствам объекта вручную. (Taken from here)

Если вы хотите, чтобы преобразовать его в номер массива используйте map()

var obj = { 
 
    0: 'a', 
 
    1: 'b', 
 
    2: 'c' 
 
}; 
 
console.log(typeof Object.keys(obj).map(Number)[0])

10

Ключи всегда строкового типа. Если вам нужны номера вам придется бросить их вручную:

var obj = { 0: 'a', 1: 'b', 2: 'c' }; 
 
var ids = Object.keys(obj).map(Number); 
 

 
console.log(ids);

2

Javascript Object не имеет цифровых клавиш! Все клавиши - это строки. Всегда.

Если вы хотите перевести другие объекты к значениям, вы должны использовать Map.

0

var obj = { 
 
    0: 'a', 
 
    1: 'b', 
 
    2: 'c' 
 
}; 
 
console.log(typeof Object.keys(obj).map(Number)[0])

+1

Вы должны дать объяснение в своем ответе, а не просто отправлять исходный код –

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