Đoạn code này sai ở đâu?

Mình mới học JS mn cho mình hỏi đoạn code này của mình sai ở đâu ạ?

var object = {
 name: 'Nam',
  age: 19,
  sex: 'Female'
}

function check(object, key) {
  for (var i in object){
    if(object[i] === key){
      return true;
    }
    else{
      return false;
    }
  }
}

check(object, age)

Trong check(object, age): age “lượm” từ đâu ra?
Nó từ object, thế nên phải là object.age.
https://repl.it/repls/SplendidGleamingConversion

4 Likes

Mục đích của đoạn code trên để làm gì thế bạn

2 Likes

Tội cho bạn nữ quá, tự nhiên đặt tên cho con gái là “Nam”.

5 Likes

sai vì i lúc này đã là key rồi nên chỉ cần so sánh i === key thôi.

3 Likes

có mấy thứ theo mình chưa ổn như sau

  1. Như SITUVN.gcd nói age là biến chưa khai báo nên không dùng được dòng cuối phải là check(object, ‘age’)

  2. Như bạn Nguyễn Duy Hùng trả lời ở trên

  3. return false không được nàm trong vòng lặp for được nếu không bạn chỉ tìm được ‘name’ thôi.

  4. Cuối cùng là cẩn thận khi sử dụng mẫu [thuộc_tính] in [đối tượng] để kiểm tra. Vì rất có thể bị lẫn các thuộc tính đã nằm trong chuỗi prototype
    Giả sử hàm của bạn đã sửa lại và thêm đoạn code này, sẽ khiến ta tưởng a thuộc object nhưng ko phải.

Object.prototype.a = "Oops";
check(object, 'a') // true

Thay vào đó sửa dụng [Đối_tượng].hasOwnProperty(‘thuoc_tinh’) để kiểm tra các thuộc tính chỉ thuộc về đối tượng đó.

4 Likes

Tình cờ đọc hungsteve nói object có tên Nam lại là Female.
Mình thấy bạn tên là Kha_Nam, có lẽ nào…

Dù sao Nam cũng là cái tên đẹp. (Việt cũng thế :slight_smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?