Dalam javascript untuk memeriksa apakah suatu variabel tidak pernah dibuat, kita lakukan saja
if (typeof MyVariable !== "undefined"){ ... }
Saya bertanya-tanya bagaimana saya melakukannya di coffeescript? ... Saya mencoba sesuatu seperti
if (MyVariable?false){ ... }
tetapi periksa ini jika MyVariable
adalah fungsi jika sehingga akan memanggil MyVariable (salah) jika tidak akan memanggil void (0) atau semacamnya.
coffeescript
undefined
Jaider
sumber
sumber
if MyVariable isnt undefined
yang menghasilkanif (MyVariable !== void 0)
.Jawaban:
Akhirnya saya menemukan cara mudah untuk melakukannya:
if (MyVariable?){ ... }
yang akan menghasilkan:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
PERBARUI 04/07/2014 Tautan Demo
sumber
item != null
undefined
? Atau haruskah Anda kemudian menggunakanif typeof myVariable isnt 'undefined'
?==
dan!=
) sebenarnya memperlakukannull
danundefined
sebagai nilai yang setara, jadiitem != null
sebenarnya menguji untuknull
danundefined
pada waktu yang sama. Tidak, jika ditulis sebagaiitem !== null
.Pertama, untuk menjawab pertanyaan Anda:
if typeof myVariable isnt 'undefined' then # do stuff
Solusi Magrangs akan berfungsi dalam banyak kasus, kecuali jika Anda perlu membedakan antara tidak terdefinisi dan salah (misalnya, jika myVariable bisa benar, salah, atau tidak terdefinisi).
Dan hanya untuk menunjukkan, Anda tidak boleh membungkus kondisi Anda dalam tanda kurung, dan Anda tidak boleh menggunakan kurung kurawal.
Kata
then
kunci dapat digunakan jika semuanya berada pada baris yang sama, jika tidak gunakan lekukan untuk menunjukkan kode apa yang ada di dalam kondisi tersebut.if something # this is inside the if-statement # this is back outside of the if-statement
Semoga ini membantu!
sumber
isnt
kata kunci setara dengan!=
di CoffeeScript, dan mungkin lebih mudah dibaca jika Anda terbiasa untuk javascript.!==
, tidak!=
!=
di Coffee, yang diterjemahkan menjadi!==
JavaScript.Jawaban ini untuk coffeescript versi lama. Lihat jawaban Jaider di atas jika Anda menginginkan jawaban yang lebih up to date (per Juli 2014)
Coffeescript ini melakukan apa yang Anda inginkan, saya pikir:
if not MyVariable? MyVariable = "assign a value"
Yang menghasilkan:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) { MyVariable = "assign a value"; }
Nb jika Anda membuat tugas
MyVariable
terlebih dahulu, meskipun Anda menyetelMyVariable
ke tidak terdefinisi seperti dalam kode ini , maka ini akan dikompilasi ke:if (!(MyVariable != null)) { MyVariable = "assign a value"; }
Saya percaya ini berhasil karena yang
!=
digunakan oleh CoffeeScriptsExistential Operator
(tanda tanya) memaksaundefined
untuk menjadi samanull
.ps Bisakah kamu mulai
if (MyVariable?false){ ... }
bekerja? Itu tidak dapat dikompilasi untuk saya kecuali ada spasi antara operator eksistensial dan false yaituMyVariable? false
yang kemudian membuat CoffeeScript memeriksanya seperti fungsi karenafalse
dianggap sebagai parameter untuk AndaMyVariable
, misalnya :if MyVariable? false alert "Would have attempted to call MyVariable as a function" else alert "but didn't call MyVariable as it wasn't a function"
Menghasilkan:
if (typeof MyVariable === "function" ? MyVariable(false) : void 0) { alert("Would have attempted to call MyVariable as a function"); } else { alert("but didn't call MyVariable as it wasn't a function"); }
sumber
variable?
sekarang hanya dikompilasi ke variabel! = null... !== null
coffeescript.org/#try:variable%3Ftypeof MyVariable isnt "undefined"
dari js2coffee
sumber
Selain jawaban Jaider di atas (saya tidak bisa berkomentar karena reputasi yang tidak mencukupi) , berhati-hatilah bahwa ini kasus yang berbeda jika itu ada di dalam objek / larik:
someArray['key']?
akan diubah menjadi:
someArray['key'] != null
Tangkapan layar dari js2coffee.org :
sumber
Saya hanya menggunakan:
if (myVariable) //do stuff
Karena undefined itu falsy, ia hanya akan melakukan sesuatu jika myVariable tidak undefined.
Anda hanya perlu menyadari bahwa ini akan 'melakukan sesuatu' untuk nilai yang 0, "" dan null
sumber
myVariable
tidak diizinkan menjadi nilai palsu sepertinull
atau0
.Cara terbersih yang saya temukan untuk menetapkan variabel ke variabel tidak terdefinisi dan tidak-null adalah menggunakan
unless
:unless ( myVar? ) myVar = 'val'
sumber
myVar ?= 'val'
Mengapa tidak menggunakan idiom OR saja?
myVar or 'val'
Jadi, hasilnya akan sama dengan myVar, kecuali tidak ditentukan dalam hal ini akan sama dengan 'val'.
sumber
''
,0.0
danfalse
. Yang, mungkin, tidak diinginkan.