Cara termudah untuk memeriksa apakah ada kunci dalam objek menggunakan CoffeeScript

110

Di CoffeeScript, apa cara paling sederhana untuk memeriksa apakah ada kunci dalam suatu objek?

ajsie
sumber

Jawaban:

182
key of obj

Ini mengkompilasi ke JavaScript key in obj. (CoffeeScript menggunakan ofsaat merujuk ke kunci, dan insaat merujuk ke nilai larik: val in arrakan menguji apakah valada di arr.)

jawaban thejh benar jika Anda ingin mengabaikan prototipe objek. Jawaban Jimmy benar jika Anda ingin mengabaikan kunci dengan nilai nullatau undefined.

Trevor Burnham
sumber
2
kemungkinan besar own key of objbekerja, juga, untuk menguji tambahan .hasOwnProperty(). "kemungkinan besar" berasal dari saya belum mencoba, tetapi sintaks ini bekerja dalam pemahaman.
domba terbang
2
@flyingsheep Tidak, ini hanya berfungsi dalam pemahaman. Cobalah: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham
ah, ok :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
domba terbang
36

'?' operator memeriksa keberadaan:

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
limscoder
sumber
16
Ini gagal jika kuncinya ada tetapi memiliki nilai null.
mu terlalu pendek
Dalam kasus di mana seseorang tidak peduli tentang kunci yang ada tetapi menjadi null, maka obj.key?mungkin yang paling ringkas.
Andrew Mao
21
obj.hasOwnProperty(name)

(untuk mengabaikan properti yang diwariskan)

thejh
sumber
Saya suka respon ini karena key of objakan menimbulkan kesalahan jika nilainya adalah string atau angka. Cannot use 'in' operator to search. Dalam kasus ini, jika objek tidak terdefinisi dan bukan null, itu akan berfungsi.
jqualls
Ini gagal jika objek memiliki nilai dari prototipe-nya.
Brian M. Hunt