d = {'hello':'abc'}
d.get('hello','default_val');
Phía trên là trăn. Làm thế nào để làm điều này trong javascript? Tôi muốn có thể đặt giá trị mặc định nếu không tìm thấy khóa nào.Tương đương với gì .get trong javascript?
d = {'hello':'abc'}
d.get('hello','default_val');
Phía trên là trăn. Làm thế nào để làm điều này trong javascript? Tôi muốn có thể đặt giá trị mặc định nếu không tìm thấy khóa nào.Tương đương với gì .get trong javascript?
Bạn đã (ít nhất là) bốn lựa chọn:
Trong nhiều trường hợp, bạn có thể sử dụng the curiously-powerful ||
operator:
x = obj.key || "default";
Điều đó có nghĩa: Đặt x
để obj.key
trừ obj.key
là falsy, trong trường hợp này, hãy sử dụng "default"
. Giá trị giả là undefined
, null
, 0
, NaN
, ""
và tất nhiên, false
. Vì vậy, bạn sẽ không muốn sử dụng nó nếu obj.key
có thể hợp lệ là 0
hoặc bất kỳ giá trị nào khác trong các giá trị đó.
Đối với tình huống mà ||
không áp dụng, đó là in
điều hành:
x = "key" in obj ? obj.key : "default";
in
cho chúng ta biết liệu một đối tượng có một tài sản với chìa khóa nhất định. Lưu ý khóa là một chuỗi (tên thuộc tính là chuỗi hoặc Ký hiệu; nếu bạn đang sử dụng Biểu tượng, bạn sẽ biết). Vì vậy, nếu obj.key
có thể hợp lệ 0
, bạn muốn sử dụng điều này thay vì # 1 ở trên.
in
sẽ tìm thấy một chìa khóa nếu nó trong đối tượng hoặc chuỗi nguyên mẫu của đối tượng (ví dụ, tất cả các nơi bạn muốn có được nó từ nếu bạn lấy tài sản). Nếu bạn chỉ muốn kiểm tra các đối tượng chính nó và không chuỗi nguyên mẫu của nó, bạn có thể sử dụng hasOwnProperty
:
x = obj.hasOwnProperty("key") ? obj.key : "default";
Cụ thể kiểm tra undefined
:
x = typeof obj.key !== "undefined" ? obj.key : "default";
Điều đó sẽ sử dụng mặc định nếu không obj
có thuộc tính đó hoặc nếu thuộc tính có thuộc tính, nhưng giá trị của thuộc tính là undefined
.
Javascript của logical OR operator là short-circuiting. Bạn có thể làm:
d["hello"] || "default_val";
gì về:
var d = {'hello':'abc'};
var helloVar = d.hello ? d.hello : 'default_val';
FWIW, hoạt động chính xác như 'helloVar = d.hello || 'default_val'; ' –
Đúng, mặc dù '... || ... 'ngắn hơn và dễ đọc hơn nhiều. Quá xấu nó không hoạt động trong các ngôn ngữ khác, nó chắc chắn sẽ làm cho ngày của tôi: p! – elslooo
Wow, không bao giờ biết điều này. Điều này có làm việc trong các ngôn ngữ khác nữa không (đặc biệt là PHP)? Nó thực sự tuyệt vời. – elslooo
@Tim: Tôi không biết PHP đủ tốt để trả lời câu hỏi đó. Trong hầu hết các ngôn ngữ (C, C++, C#, Java), '||' chỉ trả về 'true' hoặc' false'. Phiên bản của JavaScript thú vị hơn và nhiều hơn nữa trong phong cách lập trình "chức năng". (BTW, '&&' làm một cái gì đó tương tự: Nó cung cấp cho bạn những điều bên phải nếu điều bên trái là "trung thực", hoặc 'sai' nếu nó không phải là.) –
@TJCrowder, tôi chỉ thử nghiệm nó và nó không hoạt động trong PHP :(... Thanks anyway =)! – elslooo