Hướng dẫn how do you check if a key is present in a dictionary in javascript? - làm cách nào để kiểm tra xem khóa có trong từ điển trong javascript không?

Câu trả lời nhanh

Làm cách nào để kiểm tra xem một khóa cụ thể có tồn tại trong một đối tượng hoặc mảng JavaScript không? Nếu một khóa không tồn tại và tôi cố gắng truy cập nó, nó sẽ trả về sai? Hoặc ném một lỗi?

Truy cập trực tiếp một thuộc tính bị thiếu bằng cách sử dụng kiểu mảng hoặc kiểu đối tượng sẽ trả về một hằng số không xác định.

Chậm và đáng tin cậy trong toán tử và phương pháp HasownProperty

Như mọi người đã đề cập ở đây, bạn có thể có một đối tượng với một tài sản được liên kết với hằng số "không xác định".

 var bizzareObj = {valid_key:  undefined};

Trong trường hợp đó, bạn sẽ phải sử dụng HasownProperty hoặc trong nhà điều hành để biết chìa khóa có thực sự ở đó không. Nhưng, nhưng với giá nào?

Vì vậy, tôi nói với bạn ...

Trong toán tử và HasownProperty là "phương pháp" sử dụng cơ chế mô tả thuộc tính trong JavaScript (tương tự như phản xạ Java trong ngôn ngữ Java).

http://www.ecma-international.org/ecma-262/5.1/#sec-8.10

Loại mô tả thuộc tính được sử dụng để giải thích thao tác và thống nhất các thuộc tính thuộc tính được đặt tên. Các giá trị của loại mô tả thuộc tính là các bản ghi bao gồm các trường được đặt tên trong đó mỗi tên trường tên là một tên thuộc tính và giá trị của nó là giá trị thuộc tính tương ứng như được chỉ định trong 8.6.1. Ngoài ra, bất kỳ lĩnh vực có thể có mặt hoặc vắng mặt.

Mặt khác, gọi một phương thức đối tượng hoặc khóa sẽ sử dụng cơ chế JavaScript [[get]]. Đó là một cách xa hơn nhanh hơn!

Điểm chuẩn

https://jsben.ch/HaHQt

Hướng dẫn how do you check if a key is present in a dictionary in javascript? - làm cách nào để kiểm tra xem khóa có trong từ điển trong javascript không?
.

Sử dụng trong toán tử

var result = "Impression" in array;

Kết quả là

12,931,832 ±0.21% ops/sec      92% slower 

Sử dụng Hasownproperty

var result = array.hasOwnProperty("Impression")

Kết quả là

Sử dụng Hasownproperty

16,021,758 ±0.45% ops/sec     91% slower

var result = array["Impression"] === undefined

Kết quả là

168,270,439 ±0.13 ops/sec     0.02% slower 

Sử dụng Hasownproperty

var result = array.Impression  === undefined;

Kết quả là

168,303,172 ±0.20%     fastest

Sử dụng Hasownproperty

16,021,758 ±0.45% ops/sec     91% slower

Truy cập các yếu tố trực tiếp (phong cách dấu ngoặc)confirmed lack of value. On the other hand,

var result = "Impression" in array;
2 is an unknown value (not defined). If there is a property that will be used later with a proper value consider use
var result = "Impression" in array;
3 reference instead of
var result = "Impression" in array;
2 because in the initial moment the property is confirmed to lack value.

Compare:

var a = {1: null}; 
console.log(a[1] === undefined); // output: false. I know the value at position 1 of a[] is absent and this was by design, i.e.:  the value is defined. 
console.log(a[0] === undefined); // output: true. I cannot say anything about a[0] value. In this case, the key 0 was not in a[].

Truy cập các yếu tố trực tiếp (kiểu đối tượng)

Chỉnh sửa: Lý do gán cho thuộc tính giá trị

var result = "Impression" in array;
2 là gì?

Câu hỏi đó đặt câu hỏi cho tôi. Trong JavaScript, có ít nhất hai tài liệu tham khảo cho các đối tượng vắng mặt để tránh các vấn đề như thế này: var result = "Impression" in array; 3 và var result = "Impression" in array; 2.

var result = "Impression" in array;
3 là giá trị nguyên thủy đại diện cho sự vắng mặt có chủ ý của bất kỳ giá trị đối tượng nào, hoặc trong thời gian ngắn, sự thiếu giá trị được xác nhận. Mặt khác,
var result = "Impression" in array;
2 là một giá trị không xác định (không được xác định). Nếu có một thuộc tính sẽ được sử dụng sau này với giá trị thích hợp, hãy xem xét việc sử dụng tham chiếu
var result = "Impression" in array;
3 thay vì
var result = "Impression" in array;
2 vì trong thời điểm ban đầu, tài sản được xác nhận là thiếu giá trị.

Đưa ra một đối tượng JavaScript, bạn có thể kiểm tra xem khóa thuộc tính có tồn tại bên trong các thuộc tính của nó bằng toán tử

12,931,832 ±0.21% ops/sec      92% slower 
1 không.

Giả sử bạn có đối tượng

12,931,832 ±0.21% ops/sec      92% slower 
4:

var result = "Impression" in array;
0

Chúng ta có thể kiểm tra xem thuộc tính

12,931,832 ±0.21% ops/sec      92% slower 
5 có tồn tại bằng cách sử dụng câu lệnh này không, kết quả là
12,931,832 ±0.21% ops/sec      92% slower 
6:

Chúng ta có thể sử dụng điều này trong một điều kiện:

Một cách khác là sử dụng phương thức

12,931,832 ±0.21% ops/sec      92% slower 
2 của đối tượng:

var result = "Impression" in array;
1

Khi kế thừa là một phần quan trọng trong cấu trúc ứng dụng của bạn, sự khác biệt là

12,931,832 ±0.21% ops/sec      92% slower 
1 sẽ dẫn đến
12,931,832 ±0.21% ops/sec      92% slower 
6 ngay cả đối với các thuộc tính được thừa hưởng bởi các đối tượng cha.
12,931,832 ±0.21% ops/sec      92% slower 
2 không có.Nó sẽ chỉ trả về
12,931,832 ±0.21% ops/sec      92% slower 
6 nếu đối tượng có thuộc tính đó trực tiếp - không phải là một trong những tổ tiên của nó.

Tôi sử dụng cơ chế dự phòng khi tôi muốn một thuộc tính và dự phòng với giá trị mặc định nếu điều đó không tồn tại:

Nếu khóa thuộc tính

var result = array.hasOwnProperty("Impression")
2 không tồn tại trên đối tượng, câu lệnh này sẽ dẫn đến chuỗi
var result = array.hasOwnProperty("Impression")
3.