Cara termudah untuk memeriksa apakah string kosong atau nol

87

Saya punya kode ini yang memeriksa string kosong atau nol. Ini bekerja dalam pengujian.

eitherStringEmpty= (email, password) ->
  emailEmpty = not email? or email is ''
  passwordEmpty = not password? or password is ''
  eitherEmpty = emailEmpty || passwordEmpty         

test1 = eitherStringEmpty "A", "B" # expect false
test2 = eitherStringEmpty "", "b" # expect true
test3 = eitherStringEmpty "", "" # expect true
alert "test1: #{test1} test2: #{test2} test3: #{test3}"

Yang saya ingin tahu adalah apakah ada cara yang lebih baik daripada not email? or email is ''. Dapatkah saya melakukan yang setara dengan C # string.IsNullOrEmpty(arg)di CoffeeScript dengan satu panggilan? Saya selalu dapat menentukan fungsi untuknya (seperti yang saya lakukan) tetapi saya bertanya-tanya apakah ada sesuatu dalam bahasa yang saya lewatkan.

jcollum.dll
sumber

Jawaban:

118

Ya:

passwordNotEmpty = not not password

atau lebih pendek:

passwordNotEmpty = !!password
thejh
sumber
1
Ini adalah yang lebih "javascript-y" dari dua jawaban. Terutama jika Anda menggunakan !!versi, yang merupakan cara umum untuk mentransmisikan ke boolean. Jika itu penting, ini hampir pasti lebih cepat daripada mendefinisikan fungsi seperti yang disarankan Jeremy.
Aaron Dufour
Semuanya berfungsi, tetapi yang ini mendapat suara positif terbanyak. Saya suka stackoverflow.com/q/8127920/30946 agar terbaca.
jcollum
3
Gagal untuk string dengan semua spasi ... jadi tidak berfungsi untuk kosong
Arkhitech
1
@Arkhitech blank tidak sama dengan kosong, jadi berfungsi.
jcollum
2
Terlalu "pintar" untuk selera saya dalam keterbacaan; jangan berpikir saya akan menggunakannya, tapi kerja bagus
PandaWood
37

Ini tidak sepenuhnya setara, tetapi email?.lengthhanya akan benar jika emailbukan nol dan memiliki properti bukan nol .length. Jika Anda notnilai ini, hasilnya harus berperilaku seperti yang Anda inginkan untuk string dan array.

Jika emailada nullatau tidak memiliki .length, maka email?.lengthakan mengevaluasi ke null, yang salah. Jika memiliki nilai .lengthmaka nilai ini akan mengevaluasi panjangnya, yang akan menjadi salah jika kosong.

Fungsi Anda dapat diimplementasikan sebagai:

eitherStringEmpty = (email, password) ->
  not (email?.length and password?.length)
Jeremy
sumber
1
@pyrotechnick Pertanyaannya tidak menanyakan tentang membedakan Array dari Strings. Itu bertanya tentang membedakan nilai null dan string kosong dari string yang tidak kosong. Maksud saya adalah bahwa kode tersebut juga dapat membedakan nilai null dan array kosong dari array yang tidak kosong, tetapi itu berada di luar cakupan pertanyaan.
Jeremy
Namun demikian, "baikStringEmpty" adalah nama yang salah untuk metode yang Anda berikan.
kembang api
14

Ini adalah kasus di mana "kebenaran" menjadi berguna. Anda bahkan tidak perlu mendefinisikan fungsi untuk itu:

test1 = not (email and password)

Mengapa ini berhasil?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false
Ricardo Tomasi
sumber
1
Saya berasumsi Anda telah memanggil .trim()nilai sebagai bagian dari logika validasi Anda. Jawabannya lebih tentang sintaks CS.
Ricardo Tomasi
5
unless email? and email
  console.log 'email is undefined, null or ""'

Pertama, periksa apakah email tidak terdefinisi dan bukan null dengan operator eksistensial, kemudian jika Anda tahu itu ada and emailbagian hanya akan mengembalikan false jika string email kosong.

mesin potong
sumber
3

Anda dapat menggunakan coffeescript atau = operation

s = ''    
s or= null
Duane Fields
sumber
Wow, luar biasa! Terima kasih!
swrobel
1

Jika Anda perlu memeriksa bahwa isinya adalah string, bukan null dan bukan array, gunakan jenis perbandingan sederhana:

 if typeof email isnt "string"
Kevin Lamping
sumber
typeof email isnt "string"mengembalikan false untuk keduanya ''dan'a'
jcollum
1

Ini adalah jsfiddle mendemonstrasikan cara yang sangat mudah untuk melakukan ini.

Pada dasarnya Anda cukup melakukan ini adalah javascript:

var email="oranste";
var password="i";

if(!(email && password)){
    alert("One or both not set");        
}
else{
    alert("Both set");   
}

Dalam coffescript:

email = "oranste"
password = "i"
unless email and password
  alert "One or both not set"
else
  alert "Both set"

Semoga ini bisa membantu seseorang :)

Automatico
sumber
1

Saya pikir tanda tanya adalah cara termudah untuk memanggil suatu fungsi pada suatu benda jika benda itu ada.

sebagai contoh

car = {
  tires: 4,
  color: 'blue' 
}

Anda ingin mendapatkan warnanya, tetapi hanya jika mobil itu ada ...

coffeescript:

 car?.color

diterjemahkan ke javascript:

if (car != null) {
  car.color;
}

itu disebut operator eksistensial http://coffeescript.org/documentation/docs/grammar.html#section-63

Blair Anderson
sumber
String kosong mengembalikan nilai true untuk pemeriksaan keberadaan.
jcollum
1

Saya cukup yakin jawaban @thejh cukup baik untuk memeriksa string kosong TETAPI, saya pikir kita sering perlu memeriksa bahwa 'Apakah itu ada?' dan kemudian kita perlu memeriksa 'Is it empty? termasuk string, array dan objek '

Ini adalah cara singkat untuk CoffeeScript untuk melakukan ini.

tmp? and !!tmp and !!Object.keys(tmp).length

Jika kita menjaga urutan pertanyaan ini, itu akan diperiksa dengan urutan 1. apakah ada? 2. bukan string kosong? 3. bukan objek kosong?

jadi tidak ada masalah untuk semua variabel bahkan jika tidak ada.

kakadais
sumber
0

Berdasarkan jawaban tentang memeriksa apakah suatu variabel memiliki truthynilai atau tidak, Anda hanya perlu satu baris:

result = !email or !password

& Anda dapat mencobanya sendiri di konsol Coffeescript online ini

AbdelHady
sumber
0

Alih-alih jawaban yang diterima, passwordNotEmpty = !!passwordAnda dapat menggunakan

passwordNotEmpty = if password then true else false

Ini memberikan hasil yang sama (perbedaannya hanya dalam sintaksis).

Di kolom pertama adalah nilai, di kolom kedua adalah hasil dari if value:

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
Evmorov
sumber