Bagaimana saya bisa memeriksa string kosong / tidak terdefinisi / null dalam JavaScript?

2853

Saya melihat pertanyaan ini , tetapi saya tidak melihat contoh spesifik JavaScript. Apakah ada yang sederhana string.Emptytersedia di JavaScript, atau itu hanya kasus memeriksa ""?

casademora
sumber
2
hanya FYI, saya pikir API paling berguna untuk kelas String adalah di Mozilla dan javascript kit . [elated.com] ( elated.com/articles/working-with-strings ) memiliki tutorial tentang semua properti String, metode, ... Harap dicatat: tautan Mozilla telah diperbarui ke developer.mozilla.org/en/ JavaScript / Referensi / Global_Objects / ...
Gene T
Lihat ini: stackoverflow.com/a/36491147/7026966
Himanshu Shekhar
Akan sangat membantu jika persyaratannya ditentukan dengan jelas. Untuk nilai apa seharusnya isEmpty return true? Memeriksa "" menyimpulkan bahwa ia hanya akan mengembalikan true jika nilainya Tipe string dan panjang 0. Banyak jawaban di sini menganggap itu juga harus mengembalikan true untuk beberapa atau semua nilai falsey.
RobG

Jawaban:

3572

Jika Anda hanya ingin memeriksa apakah ada nilai, Anda bisa melakukannya

if (strValue) {
    //do something
}

Jika Anda perlu memeriksa khusus untuk string kosong lebih null, saya akan berpikir memeriksa terhadap ""adalah taruhan terbaik Anda, menggunakan para ===Operator (sehingga Anda tahu bahwa itu adalah, pada kenyataannya, string Anda membandingkan terhadap).

if (strValue === "") {
    //...
}
bdukes
sumber
174
Menguji properti panjang mungkin sebenarnya lebih cepat daripada menguji string terhadap "", karena interpreter tidak harus membuat objek String dari string literal.
Vincent Robert
26
@Vincent melakukan pembuatan profil yang naif di alat pengembang Chrome, pengujian === ''vs .lengthtidak menunjukkan peningkatan yang terlihat (dan .lengthhanya menggunakan jika Anda dapat mengasumsikan bahwa Anda memiliki string)
bdukes
26
@bdukes ketika Anda mulai peduli dengan optimasi mikro semacam itu, saya tidak berpikir Chrome adalah browser di mana Anda mengalami sebagian besar masalah kinerja Anda ...
Vincent Robert
15
Sekadar diketahui, jika definisi Anda tentang "string kosong" termasuk spasi, maka solusi ini tidak tepat. Untaian 1 atau lebih spasi mengembalikan true di atas. Jika Anda menggunakan JQuery, Anda cukup menggunakan ini: if ($ .trim (ref) .length === 0) - sesuai jawaban ini untuk pertanyaan serupa: stackoverflow.com/questions/2031085/…
CodeClimber
115
Seperti yang diharapkan .length > 0sebenarnya jauh lebih cepat daripada membandingkan dengan string literal! Lihatlah jsPerf
Chad
1128

Untuk memeriksa apakah string kosong, nol atau tidak terdefinisi, saya menggunakan:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

Untuk memeriksa apakah string kosong, nol atau tidak terdefinisi, saya menggunakan:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

Untuk memeriksa apakah string kosong atau hanya berisi ruang putih:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};
Jano González
sumber
21
mengapa 0 === str.length bukannya str.length === 0?
Vincent
66
@Vincent Kondisi sering ditulis seperti ini if (variable == constant value)dan jika Anda lupa '=' maka Anda menetapkan nilai konstan ke variabel daripada pengujian. Kode masih akan berfungsi karena Anda dapat menetapkan variabel dalam if. Jadi cara yang lebih aman untuk menulis kondisi ini adalah dengan membalikkan nilai konstan dan variabel. Dengan cara ini ketika Anda menguji kode Anda, Anda akan melihat kesalahan (sisi kiri dalam penugasan). Anda juga dapat menggunakan sesuatu seperti JSHint untuk melarang tugas dalam kondisi dan diperingatkan saat Anda menulisnya.
florian
2
rasa malu yang /^\s*$/.test(str)tidak bisa dibaca - mungkin menghilangkan spasi menggunakan kode atau regex yang lebih sederhana akan lebih baik? lihat stackoverflow.com/questions/6623231/… dan juga stackoverflow.com/questions/10800355/…
Adrien Be
6
/^\s*$/.test(str) dapat diganti dengan str.trim (). length === 0
Schadenfreude
21
@Incent ini juga disebut "Kondisi Yoda", seperti if blue is the sky. Lihat dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
AZ.
316

Semua jawaban sebelumnya baik, tetapi ini akan lebih baik. Gunakan operator !!( bukan tidak ).

if(!!str){
    // Some code here
}

Atau gunakan tipe casting:

if(Boolean(str)){
    // Code here
}

Keduanya melakukan fungsi yang sama. Tipecast variabel ke Boolean, di mana strvariabel.
Ia kembali falseuntuk null,undefined,0,000,"",false.
Ini mengembalikan trueuntuk string "0" dan spasi putih "".

karthick.sk
sumber
61
Mengapa ini "lebih baik"?
Mene
33
Apakah ada perbedaan antara perilaku if(str)dan if(!!str)?
Peter Olson
6
@PeterOlson jika Anda mencoba untuk menyimpan variabel sebagai boolean yang memeriksa beberapa string untuk konten maka Anda ingin melakukan ini .. alias var any = (!!str1 && !!str2 && !!str3)menangani jika ada nomor di sana juga
John Ruddell
23
Ini adalah solusi yang selalu saya gunakan. !!str.trim()untuk memastikan string tidak hanya terbuat dari spasi putih saja.
Dario Oddenino
5
Tidak seperti hack, Boolean(str)lebih mudah dibaca dan lebih sedikit "wtfish".
shinzou
105

Hal terdekat yang bisa Anda dapatkan str.Empty(dengan prasyarat bahwa str adalah sebuah String) adalah:

if (!str.length) { ...
Makan Goral
sumber
9
Bukankah itu pengecualian melempar adalah str adalah null?
Pic Mickael
3
@PicMickael Ya! Begitu juga str.Empty.
Ates Goral
99

Jika Anda perlu memastikan bahwa string bukan hanya sekelompok ruang kosong (saya berasumsi ini untuk validasi formulir), Anda perlu melakukan penggantian pada spasi.

if(str.replace(/\s/g,"") == ""){
}
Sugendran
sumber
8
Tetapi apakah pekerjaan jika apa yang Anda benar-benar ingin menguji adalah string dengan konten non-ruang. Apakah ada cara yang lebih murah untuk menguji ini?
Flash
4
Bagaimana dengan properti panjang?
driAn
27
Alih-alih menghapus semua ruang, mengapa tidak memeriksa apakah ada ruang? Memiliki 2 keuntungan yang dapat ditebus lebih awal jika ada karakter non-spasi, dan tidak memiliki string baru yang kemudian Anda periksa. if(str.match(/\S/g)){}
mpen
34
@Mark FYI, Anda tidak memerlukan pengubah global, karena pertandingan kemunculan karakter non-spasi pertama berarti string tidak kosong:str.match(/\S/)
neezer
1
mengapa harganya mahal? Jika benar, lalu mengapa jQuery menggunakan metode ini? Anda dapat menemukannya di sumber jQueryvar trimLeft = /^\s+/, trimRight = /\s+$/;
Marecky
66

Saya menggunakan:

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof(e) == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
})) // false
Jet
sumber
5
Solusi ini lebih agnostik bahasa. Satu-satunya fitur JavaScript yang diandalkannya adalah typeof. Jadi itu adalah contoh yang baik dari solusi yang dapat Anda gunakan ketika Anda tidak percaya implementasi di browser yang berbeda dan tidak punya waktu untuk mengambil solusi yang lebih baik. (IE, tidak ada akses internet). Itu seperti bukti. Bukan yang terbersih tetapi Anda bisa yakin itu akan berhasil tanpa tahu terlalu banyak tentang JavaScript.
Jeff Davis
2
Saya akan melangkah lebih jauh, dan memakukannya dengan operator === untuk case yang tidak terdefinisi. Kalau tidak, itu hanya jawaban yang sempurna.
xarlymg89
Di typeofdalam switchtidak bekerja untuk saya. Saya menambahkan if (typeof e == "undefined")tes dan berhasil. Mengapa?
Lucas
1
@Lucas Karena ini kesalahan ketik atau kekhilafan. Modifikasi Anda adalah pendekatan yang benar. (dokumen asli merujuk ke konteks fungsi kosong, bukan parameter e, yang harus diperiksa fungsi)
beeThree
Bisakah kita menggunakan case undefined:bukan case typeof(e) == "undefined":?
Boris J.
43

Anda dapat menggunakan lodash : _.isEmpty (nilai).

Ini mencakup banyak kasus seperti {}, '', null, undefined, dll

Tetapi selalu kembali trueuntuk Numberjenis tipe data primitif JavaScript seperti _.isEmpty(10)atau _.isEmpty(Number.MAX_VALUE)keduanya kembali true.

Moshii
sumber
_.isEmpty(" "); // => false
Erich
1
@Erich Karena " "tidak kosong. _.isEmpty("");mengembalikan true.
Moshii
1
cukup benar - saya sebutkan ini karena beberapa jawaban lain di sini menyiratkan validasi formulir dan memeriksa apakah string hanya terdiri dari spasi putih, dan fungsi lodash tunggal ini dengan sendirinya tidak akan menyelesaikan masalah itu.
Erich
@Erich, sekarang saya mengerti maksud Anda, terima kasih telah menyebutkan.
Moshii
36

Fungsi:

function is_empty(x)
{
    return (
        (typeof x == 'undefined')
                    ||
        (x == null)
                    ||
        (x == false)  //same as: !x
                    ||
        (x.length == 0)
                    ||
        (x == "")
                    ||
        (x.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(x))
                    ||
        (/^\s*$/.test(x))
    );
}

PS: Dalam JavaScript, jangan gunakan jeda baris setelah return;

T.Todua
sumber
1
Apakah ada peluang Anda bisa menjelaskan apa yang dilakukan oleh setiap cek? :)
DanV
2
-1 Mereka menguji berbagai hal. Tidak masuk akal untuk menempatkan semuanya dalam satu ifpernyataan.
Bennett McElwee
1
typeof MyVariable == 'undefined' tidak membedakan antara variabel yang diinisialisasi dengan nilai yang tidak ditentukan dan variabel yang tidak dideklarasikan kecuali variabel tersebut awalnya dinyatakan dan diinisialisasi ke nol. Memeriksa properti panjang menyebabkan string primitif dibungkus dalam objek string.
Scott Marcus
35

Mencoba:

if (str && str.trim().length) {  
    //...
}
Yang Dong
sumber
2
Apakah properti panjang diperlukan?
frogcoder
str.trim().lengthakan melakukan lebih cepat daripada str.trim(), sekitar 1% menurut hasil pengujian saya sendiri.
devildelta
2
@devildelta - 1% Anda adalah kesalahan dalam pengujian Anda.
Stephen M Irving
OP sedang mencari untuk menguji string kosong, tidak terdefinisi, atau null. Ini sedang menguji untuk string yang bukan salah satu dari kondisi tersebut. Dia tidak mengatakan apa pun tentang ruang putih hanya string baik. Anda dapat menguji kondisi OP hanya dengan ini, selama Anda yakin tidak ada tipe data lain yang disimpan dalam variabel: if (!str) { ... }
Stephen M Irving
34
var s; // undefined
var s = ""; // ""
s.length // 0

Tidak ada yang mewakili string kosong dalam JavaScript. Lakukan pengecekan terhadap salah length(jika Anda tahu bahwa var akan selalu berupa string) atau menentang""

cllpse
sumber
29

Saya tidak akan terlalu khawatir tentang metode yang paling efisien . Gunakan apa yang paling jelas untuk niat Anda. Bagi saya itu biasanya strVar == "".

Sesuai komentar dari Constantin , jika strVar dapat bagaimana akhirnya mengandung nilai integer 0, maka itu memang akan menjadi salah satu situasi yang mengklarifikasi niat.

Chris Noe
sumber
11
Ide buruk. Anda akan menjadi kenyataan jika strVar secara tidak sengaja ditetapkan 0.
Constantin
5
Saya setuju bahwa memperjelas maksud Anda lebih penting daripada optimasi mikro apa pun yang dihasilkan metode lain, tetapi menggunakan operator pembanding yang ketat === akan lebih baik. Ini hanya mengembalikan true jika strVarstring kosong.
Kode Tidak Berguna
Pemeriksaan gagal jika tidak ditentukan. Jadi jika (str) bekerja lebih baik
Valentin Heinitz
3
@ValentinHeinitz jika str diberi nilai falsey 0 atau "0", jika (str) secara salah akan melaporkan true. Pendekatan terbaik adalah jika (str === ""). Sederhana dan tidak akan pernah gagal.
Scott Marcus
20

Banyak jawaban, dan banyak kemungkinan berbeda!

Tanpa ragu untuk implementasi cepat dan sederhana pemenangnya adalah: if (!str.length) {...}

Namun, karena banyak contoh lain tersedia. Metode fungsional terbaik untuk ini, saya sarankan:

function empty(str)
{
    if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
    {
        return true;
    }
    else
    {
        return false;
    }
}

Agak berlebihan, saya tahu.

tfont
sumber
2
Memeriksa undefined perlu dipindahkan terlebih dahulu ke dalam cek, atau item yang tidak terdefinisi akan memberikan pengecualian pada cek sebelumnya.
SvdSinner
Sangat setuju! TANGKAPAN BAGUS. Saya akan mengedit jawaban saya di atas!
tfont
str.length === 0mengembalikan true untuk fungsi apa pun yang tidak memiliki parameter formal.
RobG
20

Anda juga bisa menggunakan ekspresi reguler:

if((/^\s*$/).test(str)) { }

Memeriksa string yang kosong atau diisi dengan spasi putih.

oem
sumber
Ini bekerja, tetapi ops-wise juga sangat mahal. Baik jika Anda hanya ingin memeriksa satu atau dua hal, bukan satu set besar.
Orpheus
20

Performa

Saya melakukan tes pada macOS v10.13.6 (High Sierra) untuk 18 solusi yang dipilih. Solusi berfungsi sedikit berbeda (untuk data masukan kasus sudut) yang disajikan dalam cuplikan di bawah ini.

Kesimpulan

  • solusi sederhana berdasarkan !str, ==, ===dan lengthcepat untuk semua browser (A, B, C, G, I, J)
  • solusi berdasarkan pada ekspresi reguler ( test, replace) dan charAtpaling lambat untuk semua browser (H, L, M, P)
  • solusi yang ditandai sebagai tercepat adalah yang tercepat hanya untuk satu kali uji coba - tetapi dalam banyak langkah itu berubah di dalam grup solusi 'cepat'

Masukkan deskripsi gambar di sini

Detail

Dalam cuplikan di bawah ini saya membandingkan hasil dari 18 metode yang dipilih dengan menggunakan parameter input yang berbeda

  • "" "a" " "- string kosong, string dengan huruf dan string dengan spasi
  • [] {} f- Array, objek dan fungsi
  • 0 1 NaN Infinity - angka
  • true false - Boolean
  • null undefined

Tidak semua metode yang diuji mendukung semua kasus masukan.

Dan kemudian untuk semua metode, saya melakukan test case kecepatan str = ""untuk browser Chrome v78.0.0, Safari v13.0.4, dan Firefox v71.0.0 - Anda dapat menjalankan tes pada mesin Anda di sini

Masukkan deskripsi gambar di sini

Kamil Kiełczewski
sumber
Ini sangat mengagumkan! Saya suka melihat semua ini ditata! Terima kasih!
WebWanderer
itu adalah studi yang saksama - terima kasih
Deian
19
  1. periksa yang var a;ada
  2. potong false spacesnilainya, lalu ujiemptiness

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }
Timothy Nwanwene
sumber
17

Juga, jika Anda menganggap string yang diisi spasi sebagai "kosong".

Anda dapat mengujinya dengan ekspresi reguler ini:

!/\S/.test(string); // Returns true if blank.
Wab_Z
sumber
14

Saya biasanya menggunakan sesuatu seperti ini,

if (!str.length) {
    // Do something
}
pengguna2086641
sumber
3
Tercepat jika Anda tahu bahwa variabelnya adalah string. Melempar kesalahan jika variabel tidak terdefinisi.
Adrian Hope-Bailie
@ AdrianHope-Bailie mengapa Anda menguji variabel yang tidak terdefinisi?
Abimael Martell
2
@AbimaelMartell Mengapa tidak? Anda memiliki variabel yang Anda deklarasikan atau yang dikirimkan kepada Anda dari beberapa cakupan yang tidak dapat Anda kontrol seperti dalam respons dari metode atau panggilan API. Anda dapat menganggapnya berisi nilai dan menggunakan tanda centang di atas tetapi jika tidak didefinisikan atau nol Anda akan mendapatkan kesalahan. var test = null; if (! test.length) {alert ("adrian is wrong");}
Adrian Hope-Bailie
OP menanyakan "bagaimana memeriksa string kosong", variabel yang tidak terdefinisi bukan string kosong. Lagi pula Anda bisa memeriksa typeof variable != "undefined"sebelum memeriksa apakah kosong.
Abimael Martell
10

Saya belum melihat jawaban yang memperhitungkan kemungkinan karakter nol dalam sebuah string. Misalnya, jika kita memiliki string karakter nol:

var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted

Untuk menguji nullnessnya, seseorang dapat melakukan sesuatu seperti ini:

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

Ini bekerja pada string nol, dan pada string kosong dan dapat diakses untuk semua string. Selain itu, dapat diperluas untuk berisi JavaScript kosong atau karakter spasi lainnya (yaitu ruang nonbreaking, tanda urutan byte, pemisah baris / paragraf, dll.).

Bikush
sumber
2
Analisis yang menarik. Saya tidak berpikir ini akan relevan dalam 99,9% kasus. TETAPI Saya baru-baru ini menemukan bahwa MySQL mengevaluasi sebuah kolom menjadi "null" jika (dan hanya jika) kolom itu berisi karakter nol ("\ 0"). Oracle di sisi lain tidak akan mengevaluasi "\ 0" sebagai nol, lebih suka memperlakukannya sebagai string dengan panjang 1 (di mana satu karakter tersebut adalah karakter nol). Ini dapat menyebabkan kebingungan jika tidak ditangani dengan benar, karena banyak pengembang web bekerja dengan database back-end, yang mungkin melewati berbagai jenis nilai "null". Itu harus di belakang pikiran setiap pengembang.
kereta sebelum kuda
10

Sementara itu kita dapat memiliki satu fungsi yang memeriksa semua 'kosong' seperti null, undefined, '', '', {}, [] . Jadi saya hanya menulis ini.

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

Gunakan kasing dan hasil.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false
Imran Ahmad
sumber
10

Sampai sekarang tidak ada metode langsung seperti string.empty untuk memeriksa apakah string kosong atau tidak. Tetapi dalam kode Anda, Anda dapat menggunakan pembungkus untuk memeriksa string kosong seperti:

// considering the variable in which your string is saved is named str.

if (str && str.length>0) { 

  // Your code here which you want to run if the string is not empty.

}

Menggunakan ini, Anda juga dapat memastikan bahwa string tidak terdefinisi atau nol juga. Ingat, tidak terdefinisi, nol, dan kosong adalah tiga hal yang berbeda.

Harshit Agarwal
sumber
Itu akan melempar kesalahan pada null atau penyebab yang tidak terdefinisi kita tidak boleh secara langsung melakukan operasi pada variabel yang null atau tidak terdefinisi - periksa apakah str ada sebelum melakukan ini seperti yang dinyatakan dalam jawaban lain & juga perhatikan bahwa ini akan bekerja pada biarkan abc = '' tetapi tidak di biarkan abc = '', keduanya berbeda.
whoami
Pertimbangkan let rand = ()=>Math.random(), lalu rand && rand.length > 0)kembalikan salah, tetapi jelas fn bukan "kosong". Yaitu mengembalikan false untuk fungsi apa pun yang tidak memiliki parameter format.
RobG
@RobG Math.random()mengembalikan nomor dan bukan string. Dan jawaban ini tentang string. ;-)
Harshit Agarwal
10

Semua jawaban ini bagus.

Tetapi saya tidak dapat memastikan bahwa variabel adalah string, tidak hanya berisi spasi (ini penting bagi saya), dan dapat berisi '0' (string).

Versi saya:

function empty(str){
    return !str || !/[^\s]+/.test(str);
}

empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty("  "); // true

Contoh di jsfiddle .

Andron
sumber
1
Hah? Jika Anda mengharapkan string, empty(0)dan empty(7)harus mengembalikan nilai yang sama.
Bennett McElwee
Dalam kasus khusus saya - empty("0")harus kembali false(karena itu bukan string kosong), tetapi empty(0)harus kembali truekarena kosong :)
Andron
Tapi 0 tidak kosong! Ini angka, dan angka tidak boleh penuh atau kosong. Tentu saja, ini fungsi Anda dan karenanya harus memenuhi persyaratan Anda, tetapi emptymerupakan nama yang menyesatkan dalam kasus ini.
Bennett McElwee
Saya pikir nama emptyitu bagus. Dalam dokumen php untuk fungsi kosong : Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.Perbedaan antara PHPdan fungsi ini - string '0'itu tidak akan diidentifikasi sebagai kosong.
Andron
Seperti yang saya katakan, itu fungsi Anda: sebut saja apa yang Anda inginkan. Tapi emptyitu nama yang tidak akurat dan menyesatkan. Sangat menarik bahwa PHP juga memiliki fungsi yang tidak disebutkan namanya empty, tetapi kegagalan PHP tidak ada hubungannya dengan JavaScript.
Bennett McElwee
10

Saya tidak melihat jawaban yang bagus di sini (setidaknya bukan jawaban yang cocok untuk saya)

Jadi saya memutuskan untuk menjawab sendiri:

value === undefined || value === null || value === "";

Anda harus mulai memeriksa apakah itu tidak terdefinisi. Kalau tidak, metode Anda bisa meledak, dan kemudian Anda dapat memeriksa apakah itu sama dengan nol atau sama dengan string kosong.

Anda tidak dapat memiliki !! atau hanya if(value)karena jika Anda memeriksa 0itu akan memberi Anda jawaban yang salah (0 salah).

Dengan demikian, bungkus dengan metode seperti:

public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }

PS: Anda tidak perlu memeriksa typeof , karena itu akan meledak dan melempar bahkan sebelum memasuki metode

Davi Daniel Siepmann
sumber
Mungkin lebih baik menggunakan konstruk Boolean (nilai) yang memperlakukan nilai tidak terdefinisi dan nol (dan juga 0, -0, false, NaN) sebagai false. Lihat stackoverflow.com/questions/856324/…
Zhuravlev A.
9

Jika seseorang perlu mendeteksi tidak hanya string kosong tetapi juga kosong, saya akan menambahkan jawaban Goral:

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}
Josef.B
sumber
8

Coba ini

str.value.length == 0
Doug
sumber
3
"".value.lengthakan menyebabkan kesalahan. Seharusnyastr.length === 0
AndFisher
Trow a TypeErrorIf strini sama dengan undefinedataunull
RousseauAlexandre
8

Anda dapat dengan mudah menambahkannya ke objek String asli di JavaScript dan menggunakannya kembali berulang-ulang ...
Sesuatu yang sederhana seperti kode di bawah ini dapat melakukan pekerjaan untuk Anda jika Anda ingin memeriksa ''string kosong:

String.prototype.isEmpty = String.prototype.isEmpty || function() {
  return !(!!this.length);
}

Kalau tidak, jika Anda ingin memeriksa ''string kosong dan ' 'dengan spasi, Anda dapat melakukannya dengan hanya menambahkan trim(), sesuatu seperti kode di bawah ini:

String.prototype.isEmpty = String.prototype.isEmpty || function() {
   return !(!!this.trim().length);
}

dan Anda bisa menyebutnya seperti ini:

''.isEmpty(); //return true
'alireza'.isEmpty(); //return false
Alireza
sumber
Apa manfaatnya melakukan !(!!this.length)daripada hanya !this(atau !this.trim()untuk opsi kedua)? String nol-panjang sudah salah, tanda kurung berlebihan, dan meniadakannya tiga kali sama persis dengan meniadakannya sekali.
John Montgomery
8

Coba ini:

export const isEmpty = string => (!string || !string.length);
V1NNY
sumber
8

Saya melakukan riset tentang apa yang terjadi jika Anda melewatkan nilai non-string dan non-kosong / nol ke fungsi tester. Seperti yang diketahui banyak orang, (0 == "") benar dalam JavaScript, tetapi karena 0 adalah nilai dan bukan kosong atau nol, Anda mungkin ingin mengujinya.

Dua fungsi berikut ini mengembalikan true hanya untuk nilai yang tidak terdefinisi, null, kosong / spasi putih dan false untuk yang lainnya, seperti angka, Boolean, objek, ekspresi, dll.

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

Contoh yang lebih rumit ada, tetapi ini sederhana dan memberikan hasil yang konsisten. Tidak perlu menguji undefined, karena itu termasuk dalam (nilai == null) cek. Anda juga dapat meniru perilaku C # dengan menambahkannya ke String seperti ini:

String.IsNullOrEmpty = function (value) { ... }

Anda tidak ingin memasukkannya ke dalam prototipe Strings, karena jika instance dari kelas-String adalah nol, itu akan kesalahan:

String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error

Saya diuji dengan array nilai berikut. Anda dapat memutarnya untuk menguji fungsi Anda jika ragu.

// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
    ['undefined', undefined],
    ['(var) z', z],
    ['null', null],
    ['empty', ''],
    ['space', ' '],
    ['tab', '\t'],
    ['newline', '\n'],
    ['carriage return', '\r'],
    ['"\\r\\n"', '\r\n'],
    ['"\\n\\r"', '\n\r'],
    ['" \\t \\n "', ' \t \n '],
    ['" txt \\t test \\n"', ' txt \t test \n'],
    ['"txt"', "txt"],
    ['"undefined"', 'undefined'],
    ['"null"', 'null'],
    ['"0"', '0'],
    ['"1"', '1'],
    ['"1.5"', '1.5'],
    ['"1,5"', '1,5'], // Valid number in some locales, not in JavaScript
    ['comma', ','],
    ['dot', '.'],
    ['".5"', '.5'],
    ['0', 0],
    ['0.0', 0.0],
    ['1', 1],
    ['1.5', 1.5],
    ['NaN', NaN],
    ['/\S/', /\S/],
    ['true', true],
    ['false', false],
    ['function, returns true', function () { return true; } ],
    ['function, returns false', function () { return false; } ],
    ['function, returns null', function () { return null; } ],
    ['function, returns string', function () { return "test"; } ],
    ['function, returns undefined', function () { } ],
    ['MyClass', MyClass],
    ['new MyClass', new MyClass()],
    ['empty object', {}],
    ['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
    ['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
    ['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];
JHM
sumber
Jika Anda berhenti menggunakan == dan menggunakan ===, maka ini menyelesaikan masalah if (s === "").
Scott Marcus
8

Untuk memeriksa apakah itu benar-benar string kosong:

if(val==="")...

Untuk memeriksa apakah itu string kosong ATAU setara logis untuk nilai-tidak (nol, tidak terdefinisi, 0, NaN, false, ...):

if(!val)...
Luca C.
sumber
7

Tidak ada isEmpty()metode, Anda harus memeriksa jenis dan panjangnya:

if (typeof test === 'string' && test.length === 0){
  ...

Jenis pemeriksaan yang diperlukan untuk menghindari kesalahan runtime saat testini undefinedatau null.

Agustí Sánchez
sumber
7

Mengabaikan string spasi putih, Anda bisa menggunakan ini untuk memeriksa null, kosong, dan tidak terdefinisi:

var obj = {};
(!!obj.str) // Returns false

obj.str = "";
(!!obj.str) // Returns false

obj.str = null;
(!!obj.str) // Returns false

Ini ringkas dan berfungsi untuk properti yang tidak terdefinisi, meskipun bukan yang paling mudah dibaca.

mricci
sumber