01/10/2018, 10:58

For..in và for...of javascript?

var arr = [3, 5, 7];
arr.foo = 'hello';

for (var i in arr) {
   console.log(i); // logs "0", "1", "2", "foo"
}

for (var i of arr) {
   console.log(i); // logs 3, 5, 7
}

Đây là đoạn code khiến minh không hiểu ở chỗ

for (var i of arr) {
   console.log(i); // logs 3, 5, 7
}

Sao sao ở đây nó không in ra “Hello” nữa mà chỉ dừng lại ở “3, 5, 7” ai giải thích hộ mình với.

Hoang viết 13:07 ngày 01/10/2018

Nhưng bạn ơi! chỗ for…of
Nó không hiện ra chữ “hello” mình mới thắc mắc đó … <–
Nó chính là vấn đề

Hung viết 12:59 ngày 01/10/2018

Quên
For of nó chỉ duyệt value của các phần từ có key có thể “iterator”, mặc định array các key kiểu số của nó thuộc iterator. Còn thuộc tính foo của bạn tự định nghĩa, nên foo không phải là key có tính chất iterator. Vì vậy for of không in ra value của key foo.

Hoang viết 13:05 ngày 01/10/2018

Vậy thì có cách nào in hết ra một lượt không bạn ?

Hung viết 13:13 ngày 01/10/2018

Viết hàm định nghĩa lại iterator thôi bạn, mình cũng ít khi định nghĩa lại. Bạn xem link này nha.

MDN Web Docs

Iterators and generators

Processing each of the items in a collection is a very common operation. JavaScript provides a number of ways of iterating over a collection, from simple for loops to map() and filter(). Iterators and Generators bring the concept of iteration...

var iterable = {
  [Symbol.iterator]() {
    return {
      i: 0,
      next() {
        if (this.i < 3) {
          return { value: this.i++, done: false };
        }
        return { value: undefined, done: true };
      }
    };
  }
};

for (var value of iterable) {
  console.log(value);
}
Thuc Nguyen Tan viết 13:06 ngày 01/10/2018

Nó có vào đâu mà in ra bạn, máy tính nó cũng thông minh biết bạn nhầm ấy
Xem nhé

var arr=[3,5,7];
arr.foo="hello";
console.log(arr);//Array [3,5,7]

//Nó bít ông lập trình viên nhầm nên không add cái hello vào!!!
//nó tự xử luôn không báo biếc gì cả

arr.push('hello');
console.log(arr);//Array[3,5,7,"hello"]
Hoang viết 13:14 ngày 01/10/2018

Nhưng bạn ơi một cái là thuộc tính, một cái là kiểu “string” mà… đánh đồng được à??
Mình mới học cái js này nên có gì sai đừng gạch đá nhé

Thuc Nguyen Tan viết 13:04 ngày 01/10/2018

javascript là thế nó đếch phân biệt bạn ạ

Bạn phải phân biệt cái array
Hay là bạn muốn viết cái này:

var hs={
      ten:"HoangNew",
      diem:[7,8,9,'giỏi'],
}

Bạn viết thế thì nó hiểu đấy.

Thuc Nguyen Tan viết 12:59 ngày 01/10/2018

Thế à, cám ơn, nhưng nên tránh mấy cái không hợp với logic của mình:cry:

viết 13:08 ngày 01/10/2018

Mình k rõ bạn từ ngôn ngữ nào nhảy sang nhưng cần học lại Array, Object và Function trong js.

Khi bạn viết arr.foo = "hello" nghĩa là gì và nó khác gì với arr.push("hello"), (arr["foo"] = "hello" thì có khác k?)

Việc dùng for of hay for in hay for thường không phải là câu hỏi chính xác cho vấn đề bạn mắc phải.

Nguyễn Văn Khoa viết 13:13 ngày 01/10/2018

Hi bạn,
Mình cũng có viết một bài về vòng lặp trong Javascript, bạn có thể đọc thêm nhé:

Hoang viết 13:10 ngày 01/10/2018

Bạn ơi cho mình hỏi chút là mình gặp lỗi khi sử dụng từ khóa “let”
Bạn có thể giúp mình với k?

Hung viết 12:58 ngày 01/10/2018

Thêm "use strict" vào đầu file.

Hoang viết 13:00 ngày 01/10/2018

Thanks bạn nha

Bài liên quan
0