2016-05-30 13 views
9

Khi tôi chạy đoạn mã sauTại sao Object.keys là lợi nhuận của mảng chuỗi thay vì mảng các số

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

Trong obj đối tượng tôi đang tạo ra các phím số.

Bất kỳ lý do nào, tại sao chuỗi của nó chứ không phải là number?

+2

Bạn không thể có phím số cho thuộc tính đối tượng. Thuộc tính đối tượng luôn là chuỗi. –

+0

nếu bạn cần số như các phím sử dụng ES2015 'Bản đồ ' – rand

+0

Nhưng chúng ta có thể làm bằng' obj [0] ', trong đó' 0' là số, Tôi chỉ muốn biết bất kỳ lý do cụ thể nào mà chúng được xử lý theo cách này – JagsSparrow

Trả lời

4

Object.keys trả về một mảng với chuỗi

Object.keys() trả về một mảng mà các phần tử là chuỗi tương ứng với đếm được các thuộc tính được tìm thấy trực tiếp trên đối tượng. Thứ tự của các thuộc tính là giống như được đưa ra bằng cách lặp qua các thuộc tính của đối tượng theo cách thủ công.

Bạn nhận được một chuỗi các chuỗi, bởi vì Property names là các chuỗi theo định nghĩa.

Tên thuộc tính phải là chuỗi. Điều này có nghĩa là các đối tượng không phải chuỗi không thể được sử dụng như các khóa trong đối tượng. Bất kỳ đối tượng không phải chuỗi nào, bao gồm một số, được nhập thành chuỗi thông qua phương thức toString.

+0

@pvg, trong khi * 'toString' không phải là một diễn viên, nó trả về một biểu diễn chuỗi bất kỳ đối tượng nào. Bao gồm các chuỗi. * Là đúng, mdn đã nêu ở trên. –

+1

Ah nó có ý nghĩa hơn như một báo giá bây giờ. Nó vẫn còn, mặc dù xuất xứ MDN, hoàn toàn sai, đó là một chuyển đổi, không phải là một diễn viên ngay cả khi không có khiếu nại nitpicky rằng 'typecasted' không phải là tiếng Anh đúng ngữ pháp. – pvg

2

Theo tài liệu Object.keys() lợi nhuận chuỗi mảng

Object.keys() trả về một mảng mà các phần tử là chuỗi tương ứng với các thuộc tính đếm được tìm thấy trực tiếp vào đối tượng. Trật tự của các thuộc tính cũng giống như được đưa ra bởi Looping trên các thuộc tính của đối tượng bằng tay. (Taken from here)

Nếu bạn muốn chuyển nó sang mảng số sau đó sử dụng map()

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

10

Keys là luôn thuộc loại Chuỗi. Nếu bạn cần số, bạn sẽ phải bỏ chúng bằng tay:

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

 
console.log(ids);

2

Đối tượng Javascript không có phím số! Tất cả các phím là Strings. Luôn luôn.

Nếu bạn muốn ánh xạ những thứ khác với giá trị, bạn nên sử dụng Map.

0

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

+1

Bạn nên đưa ra giải thích trong câu trả lời thay vì chỉ đăng mã nguồn –

Các vấn đề liên quan