Cách đơn giản nhất để kiểm tra xem khóa có tồn tại trong đối tượng hay không bằng CoffeeScript


110

Trong CoffeeScript, cách đơn giản nhất để kiểm tra xem khóa có tồn tại trong một đối tượng hay không?

Câu trả lời:


182
key of obj

Điều này biên dịch thành JavaScript key in obj. (CoffeeScript sử dụng ofkhi tham chiếu đến các khóa và inkhi tham chiếu đến các giá trị mảng: val in arrsẽ kiểm tra xem valcó ở trong không arr.)

Câu trả lời của thejh là đúng nếu bạn muốn bỏ qua nguyên mẫu của đối tượng. Câu trả lời của Jimmy là đúng nếu bạn muốn bỏ qua các khóa có giá trị nullhoặc a undefined.


2
rất có thể cũng own key of objhoạt động để kiểm tra bổ sung .hasOwnProperty(). "rất có thể" đến từ việc tôi đã không thử, nhưng cú pháp này hoạt động một cách dễ hiểu.
bay cừu

2
@flyingsheep Không, nó chỉ hoạt động khi hiểu. Hãy thử: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham

ah, ok :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
bay cừu

36

Các '?' nhà điều hành kiểm tra sự tồn tại:

if obj?
    # object is not undefined or null

if obj.key?
    # obj.key is not undefined or null

# call function if it exists
obj.funcKey?()

# chain existence checks, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?.grandChildKey

# chain existence checks with function, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?().grandChildKey

16
Điều này không thành công nếu khóa ở đó nhưng có giá trị là null.
mu quá ngắn

Trong trường hợp một người không quan tâm đến khóa hiện có nhưng lại là rỗng, thì obj.key?có lẽ là ngắn gọn nhất.
Andrew Mao

21
obj.hasOwnProperty(name)

(để bỏ qua các thuộc tính kế thừa)


Tôi thích phản hồi này vì key of objsẽ tạo ra một lỗi nếu giá trị là một chuỗi hoặc số. Cannot use 'in' operator to search. Trong trường hợp này nếu đối tượng không phải là không xác định và không null thì nó sẽ hoạt động.
jqualls

Điều này không thành công khi đối tượng có giá trị từ nguyên mẫu của nó.
Brian M. Hunt
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.