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?

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.


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

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)


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.