Saya melihat pertanyaan ini , tetapi saya tidak melihat contoh spesifik JavaScript. Apakah ada yang sederhana string.Empty
tersedia di JavaScript, atau itu hanya kasus memeriksa ""
?
Saya melihat pertanyaan ini , tetapi saya tidak melihat contoh spesifik JavaScript. Apakah ada yang sederhana string.Empty
tersedia di JavaScript, atau itu hanya kasus memeriksa ""
?
Jawaban:
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 === "") {
//...
}
=== ''
vs .length
tidak menunjukkan peningkatan yang terlihat (dan .length
hanya menggunakan jika Anda dapat mengasumsikan bahwa Anda memiliki string)
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());
};
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.
/^\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/…
if blue is the sky
. Lihat dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
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 str
variabel.
Ia kembali false
untuk null,undefined,0,000,"",false
.
Ini mengembalikan true
untuk string "0" dan spasi putih "".
if(str)
dan if(!!str)
?
var any = (!!str1 && !!str2 && !!str3)
menangani jika ada nomor di sana juga
!!str.trim()
untuk memastikan string tidak hanya terbuat dari spasi putih saja.
Boolean(str)
lebih mudah dibaca dan lebih sedikit "wtfish".
Hal terdekat yang bisa Anda dapatkan str.Empty
(dengan prasyarat bahwa str adalah sebuah String) adalah:
if (!str.length) { ...
str.Empty
.
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,"") == ""){
}
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
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
typeof
dalam switch
tidak bekerja untuk saya. Saya menambahkan if (typeof e == "undefined")
tes dan berhasil. Mengapa?
case undefined:
bukan case typeof(e) == "undefined":
?
Anda dapat menggunakan lodash : _.isEmpty (nilai).
Ini mencakup banyak kasus seperti {}
, ''
, null
, undefined
, dll
Tetapi selalu kembali true
untuk Number
jenis tipe data primitif JavaScript seperti _.isEmpty(10)
atau _.isEmpty(Number.MAX_VALUE)
keduanya kembali true
.
_.isEmpty(" "); // => false
" "
tidak kosong. _.isEmpty("");
mengembalikan true.
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
;
if
pernyataan.
Mencoba:
if (str && str.trim().length) {
//...
}
str.trim().length
akan melakukan lebih cepat daripada str.trim()
, sekitar 1% menurut hasil pengujian saya sendiri.
if (!str) { ... }
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.
===
akan lebih baik. Ini hanya mengembalikan true jika strVar
string kosong.
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.
str.length === 0
mengembalikan true untuk fungsi apa pun yang tidak memiliki parameter formal.
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
!str
, ==
, ===
dan length
cepat untuk semua browser (A, B, C, G, I, J)test
, replace
) dan charAt
paling lambat untuk semua browser (H, L, M, P)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 fungsi0
1
NaN
Infinity
- angkatrue
false
- Booleannull
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
var a;
adapotong false spaces
nilainya, lalu ujiemptiness
if ((a)&&(a.trim()!=''))
{
// if variable a is not empty do this
}
Saya biasanya menggunakan sesuatu seperti ini,
if (!str.length) {
// Do something
}
typeof variable != "undefined"
sebelum memeriksa apakah kosong.
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.).
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
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.
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.
Math.random()
mengembalikan nomor dan bukan string. Dan jawaban ini tentang string. ;-)
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 .
empty(0)
dan empty(7)
harus mengembalikan nilai yang sama.
empty("0")
harus kembali false
(karena itu bukan string kosong), tetapi empty(0)
harus kembali true
karena kosong :)
empty
merupakan nama yang menyesatkan dalam kasus ini.
empty
itu 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.
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 0
itu 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
Coba ini
str.value.length == 0
"".value.length
akan menyebabkan kesalahan. Seharusnyastr.length === 0
TypeError
If str
ini sama dengan undefined
ataunull
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
!(!!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.
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; } }]
];
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 test
ini undefined
atau null
.
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.