Khi bạn sử dụng cấu trúc này:
for (var name in namesArray) {
giá trị của name
sẽ là chỉ số trong mảng (tên tài sản). Nếu bạn muốn giá trị thực tế trong mảng, bạn phải sử dụng tên tài sản/chỉ số để có được giá trị:
document.write(namesArray[name]);
Tất nhiên, bạn thực sự không nên lặp mảng như vậy ở nơi đầu tiên bởi vì lặp lại tất cả các thuộc tính enumerable của đối tượng mảng (có khả năng bao gồm các phần tử không mảng) như bạn có thể thấy trong this example. Thay vào đó, bạn nên sử dụng một for
vòng truyền thống như trong ví dụ mã này rằng sau:
var namesArray = [];
do {
var names = prompt("Enter a name: ");
namesArray.push(names);
} while (names != "")
namesArray.sort();
for (var i = 0; i < namesArray.length; i++) {
document.write(namesArray[i]);
}
Các tùy chọn khác cho iterating mảng:
namesArray.forEach(function(value) {
document.write(value)
});
Hoặc, trong ES6, bạn có thể sử dụng for/of syntax thực sự hoạt động cách bạn đang cố gắng sử dụng cho/in:
for (let value of namesArray) {
document.write(value);
}
Bạn cũng có thể muốn hiểu rằng sử dụng document.write()
sau khi tài liệu đã được phân tích cú pháp và tải sẽ làm cho trình duyệt xóa tài liệu hiện tại và bắt đầu một tài liệu mới. Tôi không biết bối cảnh lớn hơn mã này phù hợp với, nhưng điều đó có thể gây ra vấn đề cho bạn.
Điều này sẽ làm việc nếu nó là một 'for-of' loop:' for (cho tên của namesArray) '. – Xufox