Kiểm tra xem khóa có tồn tại trong đối tượng JS không


88

Tôi có đối tượng JavaScript sau:

var obj = {
    "key1" : val,
    "key2" : val,
    "key3" : val
}

Có cách nào để kiểm tra xem khóa có tồn tại trong mảng hay không, tương tự như cách này?

testArray = jQuery.inArray("key1", obj);

không hoạt động.

Tôi có phải lặp lại đối tượng như thế này không?

jQuery.each(obj, function(key,val)){}

4
js - đối tượng theo nghĩa đen :) (không jQuery object)
funerr

True;), chương trình mà tôi không có một js nền - bắt đầu với thư viện jQuery ngay từ đầu, và tôi tin rằng tôi cần phải học những điều cơ bản ...
user2065483

obj.has("key1")sẽ hoạt động nếu bạn đang sử dụng ES6.
Diablo


1
@Diablo Tôi nghĩ bạn đang muốn nói obj.hasOwnProperty("key1")thay vì chỉ has?
Aminu Kano

Câu trả lời:


173

Sử dụng intoán tử :

testArray = 'key1' in obj;

Sidenote: Những gì bạn có ở đó, thực ra không có đối tượng jQuery, mà chỉ là một Đối tượng JavaScript đơn giản.


4
Chúng ta có thể kiểm tra không innhư thế này không?
SagarPPanchal

5
@SagarPanchal Ý bạn là gì? Một cái gì đó như thế testArray = !( 'key1' in obj);nào?
Sirko

49

Đó không phải là một đối tượng jQuery, nó chỉ là một đối tượng.

Bạn có thể sử dụng phương thức hasOwnProperty để kiểm tra khóa:

if (obj.hasOwnProperty("key1")) {
  ...
}

bạn không nên sử dụng nó. nó được cho là chậm. Cách tốt nhất là sử dụng 'chìa khóa' trong đối tượng
Rehman hannad

@hannadrehman Bạn có thể cho tôi tham khảo tài liệu / bài báo mà nó được đề cập không? :)
Nabin

1
@Fan_of_Martijn_Pieters Tôi tuân theo bộ quy tắc ESlint nghiêm ngặt. nó được đề cập ở đó như một trong những quy tắc. eslint.org/docs/rules/no-prototype-builtins
hannad rehman

@hannadrehman Không sử dụng key-in-object, nó có thể sai, đây là cách tốt nhất.

Đã phản đối vì điều này không hoạt động khi phát hiện khóa có giá trị null. Ví dụ: nếu giá trị của obj ["key1"] == null (vì vậy key1 tồn tại trong obj và giá trị của nó là null), điều này sẽ trả về kết quả sai rằng key1 không có trong obj.
user1258361

7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

if ("key1" in obj)
    console.log("has key1 in obj");

================================================== =======================

Để truy cập khóa con của khóa khác

var obj = {
    "key1": "k1",
    "key2": "k2",
    "key3": "k3",
    "key4": {
        "keyF": "kf"
    }
};

if ("keyF" in obj.key4)
    console.log("has keyF in obj");

1
Hoặc nếu không có key1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen

3

Câu trả lời trên là tốt. Nhưng điều này cũng tốt và hữu ích.

!obj['your_key']  // if 'your_key' not in obj the result --> true

Nó tốt cho kiểu mã ngắn, đặc biệt trong câu lệnh if:

if (!obj['your_key']){
    // if 'your_key' not exist in obj
    console.log('key not in obj');
} else {
    // if 'your_key' exist in obj
    console.log('key exist in obj');
}

Lưu ý: Nếu khóa của bạn bằng null hoặc "" câu lệnh "if" của bạn sẽ sai.

obj = {'a': '', 'b': null, 'd': 'value'}
!obj['a']    // result ---> true
!obj['b']    // result ---> true
!obj['c']    // result ---> true
!obj['d']    // result ---> false

Vì vậy, cách tốt nhất để kiểm tra xem khóa có tồn tại trong đối tượng hay không là:'a' in obj


1

Bạn có thể thử điều này:

const data = {
  name : "Test",
  value: 12
}

if("name" in data){
  //Found
}
else {
  //Not found
}

1

map.has(key)là cách ECMAScript 2015 mới nhất để kiểm tra sự tồn tại của một khóa trong bản đồ. Tham khảo điều này để biết chi tiết đầy đủ.


0

cách đơn giản nhất là

const obj = {
  a: 'value of a',
  b: 'value of b',
  c: 'value of c'
};

if(obj.a){
  console.log(obj.a);
}else{
  console.log('obj.a does not exist');
}


nếu alà một chuỗi rỗng, không hoặc null, nó sẽ vẫn trả về 'obj.a không tồn tại', mặc dù khóa atồn tại.
Twisted Whisper
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.