Bagaimana saya dapat memeriksa nilai-nilai null dalam JavaScript? Saya menulis kode di bawah ini tapi itu tidak't bekerja.
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
Dan bagaimana saya dapat menemukan kesalahan dalam program JavaScript?
Javascript sangat fleksibel dengan salam untuk memeriksa "null" nilai-nilai. I'm menebak anda're-benar mencari string kosong, di mana hal ini lebih sederhana kode yang akan bekerja:
if(!pass || !cpass || !email || !cemail || !user){
Yang akan memeriksa untuk string kosong (","
), null
, undefined
, false
dan angka 0
dan NaN
Harap dicatat bahwa jika anda secara khusus memeriksa angka-angka ini adalah kesalahan umum untuk miss 0
dengan metode ini, dan num !== 0
lebih disukai (atau num !== -1
atau ~num
(hacky kode yang juga pemeriksaan terhadap -1
)) untuk fungsi-fungsi yang mengembalikan -1
, misalnya indexOf
)
Untuk memeriksa null KHUSUS anda akan menggunakan ini:
if (variable === null)
Tes ini akan HANYA lulus untuk null
dan tidak akan lulus untuk ","
, undefined
, false
, 0
, atau NaN
.
Selain itu, saya've disediakan mutlak pemeriksaan untuk masing-masing "palsu-seperti" nilai (salah satu yang akan kembali berlaku untuk !variabel
).
Catatan, untuk beberapa mutlak cek, anda akan perlu untuk mengimplementasikan penggunaan benar-benar sama dengan: ===
dan jenis
.
[I've menciptakan JSFiddle di sini untuk menunjukkan semua individu tes kerja](
)Berikut ini adalah output dari masing-masing check:
Null Test:
if (variable === null)
- variable = ""; (false) typeof variable = string
- variable = null; (true) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Empty String Test:
if (variable === '')
- variable = ''; (true) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Undefined Test:
if (typeof variable == "undefined")
-- or --
if (variable === undefined)
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (true) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
False Test:
if (variable === false)
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (true) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Zero Test:
if (variable === 0)
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (true) typeof variable = number
- variable = NaN; (false) typeof variable = number
NaN Test:
if (typeof variable == 'number' && !parseFloat(variable) && variable !== 0)
- variable = ''; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (true) typeof variable = number
Seperti yang anda lihat, itu's sedikit lebih sulit untuk menguji terhadap NaN
;
Ketat kesetaraan operator:-
Kita dapat memeriksa null oleh ===
if ( value === null ){
}
Hanya dengan menggunakan jika
if( value ) {
}
akan mengevaluasi ke true jika nilai tidak:
Perbaikan atas jawaban yang diterima oleh eksplisit memeriksa untuk null
tapi dengan sintaks sederhana:
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
}
// Test
let pass=1, cpass=1, email=1, cemail=1, user=1; // just to test
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
console.log ("Yayy! None of them are null");
} else {
console.log ("Oops! At-lease one of them is null");
}
Pertama, anda harus kembali pernyataan tanpa fungsi tubuh. Kemungkinannya adalah bahwa yang akan melempar kesalahan.
Cara yang bersih untuk melakukan cek anda untuk hanya akan menggunakan ! operator:
if (!pass || !cpass || !email || !cemail || !user) {
alert("fill all columns");
}
Dalam JavaScript, tidak ada string adalah sama dengan null
.
Mungkin anda diharapkan pass == null
untuk menjadi kenyataan ketika lulus
adalah string kosong karena anda're menyadari bahwa longgar kesetaraan operator ==
melakukan beberapa jenis jenis paksaan.
Misalnya, ungkapan ini benar:
'' == 0
Sebaliknya, ketat kesetaraan operator ===
mengatakan bahwa ini adalah palsu:
'' === 0
Mengingat bahwa''
dan 0
yang longgar yang sama, anda mungkin cukup berspekulasi bahwa''
dan null
longgar sama. Namun, mereka tidak.
Ungkapan ini adalah salah:
'' == null
Hasil dari membandingkan string untuk null
adalah palsu. Oleh karena itu, pass == null
dan semua tes lainnya yang selalu salah, dan pengguna tidak pernah mendapat peringatan.
Untuk memperbaiki kode anda, membandingkan masing-masing nilai untuk string kosong:
pass === ''
Jika anda're tertentu yang lulus
adalah string, pass == ''
juga akan bekerja karena hanya string kosong adalah longgar sama dengan string kosong. Di sisi lain, beberapa ahli mengatakan bahwa itu's praktik yang baik untuk selalu menggunakan ketat kesetaraan dalam JavaScript kecuali anda secara khusus ingin melakukan jenis pemaksaan yang longgar kesetaraan operator melakukan.
Jika anda ingin tahu apa yang pasangan dari nilai-nilai yang longgar sama, lihat tabel "Kesamaan perbandingan" di Mozilla artikel pada topik ini.
anda dapat menggunakan try catch akhirnya
try {
document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
} catch (e) {
if (e.name.toString() == "TypeError") //evals to true in this case
//do something
} finally {}
anda juga dapat membuang
kesalahan anda sendiri. Lihat ini.
Ini adalah komentar pada WebWanderer's solusi tentang memeriksa NaN (I don't memiliki cukup rep belum meninggalkan formal komentar). Solusi berbunyi sebagai
if(!parseInt(variable) && variable != 0 && typeof variable === "number")
tapi ini akan gagal untuk bilangan rasional yang akan bulat untuk 0
, seperti variabel = 0.1
. Sebuah tes yang lebih baik akan sama:
if(isNaN(variable) && typeof variable === "number")
Sebenarnya saya pikir anda mungkin perlu untuk menggunakan
jika (nilai !== null || nilai !== undefined)
karena jika anda menggunakan if (nilai)
anda juga dapat menyaring 0 atau nilai-nilai yang palsu.
Pertimbangkan dua fungsi:
const firstTest = value => {
if (value) {
console.log('passed');
} else {
console.log('failed');
}
}
const secondTest = value => {
if (value !== null && value !== undefined) {
console.log('passed');
} else {
console.log('failed');
}
}
firstTest(0); // result: failed
secondTest(0); // result: passed
firstTest(false); // result: failed
secondTest(false); // result: passed
firstTest(''); // result: failed
secondTest(''); // result: passed
firstTest(null); // result: failed
secondTest(null); // result: failed
firstTest(undefined); // result: failed
secondTest(undefined); // result: failed
Dalam situasi saya, saya hanya perlu untuk memeriksa jika nilai null dan undefined dan saya tidak ingin untuk menyaring 0
atau palsu
atau''
nilai-nilai. jadi saya menggunakan kedua tes, tetapi anda mungkin perlu untuk menyaring mereka juga yang mungkin menyebabkan anda untuk menggunakan tes pertama.
Anda dapat menggunakan lodash modul untuk memeriksa nilai null atau tidak terdefinisi
_.isNil(value)
Example
country= "Abc"
_.isNil(country)
//false
state= null
_.isNil(state)
//true
city= undefined
_.isNil(state)
//true
pin= true
_.isNil(pin)
// false
Referensi link: https://lodash.com/docs/#isNil
Aku menemukan cara lain untuk menguji apakah nilai null:
if(variable >= 0 && typeof variable === "object")
null
bertindak sebagai nomor
dan objek
di waktu yang sama. Membandingkan null >= 0
atau null <= 0
hasil benar
. Membandingkan null === 0
atau null > 0
atau null < 0
akan menghasilkan false. Tapi sebagai null
juga merupakan objek kita dapat mendeteksi sebagai null.
Saya membuat fungsi yang lebih kompleks natureof penyihir akan melakukan lebih baik dari typeof dan dapat mengatakan apa jenis untuk memasukkan atau menyimpan dikelompokkan
/ fungsi natureof(variabel, [termasuk jenis]) termasuk jenis ini adalah null - null akan menghasilkan "undefined" atau jika disertakan, akan mengakibatkan "null" NaN - NaN akan menghasilkan "undefined" atau jika disertakan, akan mengakibatkan "NaN" -infinity - akan terpisah negatif -Inifity dari "Infinity" nomor akan dibagi jumlah ke "int" atau "ganda" hotel yang - akan terpisah "para" dari "objek" kosong - kosong "string" akan menghasilkan "kosong" atau kosong=tidak terdefinisi kosong "string" akan menghasilkan "undefined" / fungsi natureof(v, ...jenis){ /null/ if(v === null) return jenis.meliputi('null') ? "null" : "undefined"; /NaN/ if(typeof v == "nomor") return (isNaN(v)) ? jenis.meliputi('NaN') ? "NaN" : "undefined" : /-infinity/ (v+1 === v) ? (jenis.meliputi('-infinity') && v === Nomor.NEGATIVE_INFINITY) ? "-infinity" : "infinity" : /nomor/ (jenis.meliputi('nomor')) ? (Jumlah.isInteger(v)) ? "int" : "ganda" : "nomor"; /array/ if(typeof v == "objek") return (jenis.meliputi('array') && Array.isArray(v)) ? "para" : "objek"; /kosong/ if(typeof v == "string") return (v == "") ? jenis.meliputi('kosong') ? "kosong" : /kosong=tidak terdefinisi/ jenis.meliputi('kosong=tidak terdefinisi') ? "undefined" : "string" : "string"; yang lain kembali typeof v }
// DEMO biarkan jenis = [null, "", "string", undefined, NaN, Infinity, -Infinity, palsu, "salah" benar, "benar", 0, 1, -1, 0.1, "test", {var:1}, [1,2], {0: 1, 1: 2, durasi: 2}]
bagi kami(saya tipe){ konsol.log("natureof ", jenis[i], " = ", natureof(jenis[i], "null", "NaN", "-infinity", "nomor", "para", "kosong=tidak terdefinisi")) }
Saya membuat ini sangat sederhana fungsi yang bekerja keajaiban:
function safeOrZero(route) {
try {
Function(`return (${route})`)();
} catch (error) {
return 0;
}
return Function(`return (${route})`)();
}
Rute ini dengan rantai nilai yang dapat meledak. Saya menggunakannya untuk jQuery/cheerio dan benda-benda dan semacamnya.
Contoh 1: sebuah benda yang sederhana seperti ini const testObj = {item: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];};
.
Tapi itu bisa menjadi sangat besar objek yang kita belum't bahkan dibuat. Jadi saya lulus melalui:
let value1 = testobj.items[2].val; // "hum!"
let value2 = testobj.items[3].val; // Uncaught TypeError: Cannot read property 'val' of undefined
let svalue1 = safeOrZero(`testobj.items[2].val`) // "hum!"
let svalue2 = safeOrZero(`testobj.items[3].val`) // 0
Tentu saja jika anda lebih suka anda dapat menggunakan null
atau 'Tidak ada nilai'
... Apa pun yang sesuai dengan kebutuhan anda.
Biasanya DOM query atau jQuery selector mungkin melemparkan kesalahan jika itu's tidak ditemukan. Tapi menggunakan sesuatu seperti:
const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
[...]
}
AFAIK di JAVASCRIPT bila variabel menyatakan tapi tidak diberi nilai, tipenya adalah undefined
. sehingga kita dapat memeriksa variabel bahkan jika itu akan menjadi sebuah objek
memegang beberapa contoh di tempat nilai.
membuat helper metode untuk memeriksa nulitas yang mengembalikan true
dan menggunakannya dalam API.
helper fungsi untuk memeriksa apakah variabel kosong:
function isEmpty(item){
if(item){
return false;
}else{
return true;
}
}
coba-menangkap dengan API call:
try {
var pass, cpass, email, cemail, user; // only declared but contains nothing.
// parametrs checking
if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
}else{
// do stuff
}
} catch (e) {
if (e instanceof ReferenceError) {
console.log(e.message); // debugging purpose
return true;
} else {
console.log(e.message); // debugging purpose
return true;
}
}
beberapa kasus uji:
var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true
console.log("isEmpty? "+isEmpty(item));