cek javascript untuk tidak null

132

Di bawah ini adalah cuplikan kode, tempat kami mengambil nilai formulir. Sebelum diproses lebih lanjut periksa apakah nilainya tidak nol ..

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

Adakah ide mengapa hal itu terjadi begitu .. ??

ria
sumber
2
CW terjadi karena 6+ pengguna mengedit pertanyaan.
ANDA
! == bukannya! =
GetBackerZ

Jawaban:

78

Itu karena val tidak null, tetapi berisi 'null'sebagai string.

Coba periksa dengan 'nol'

if ('null' != val)

Untuk penjelasan tentang kapan dan mengapa ini bekerja, lihat detail di bawah ini .

Arsen Mkrtchyan
sumber
2
seharusnya jika (null! = val) entah bagaimana itu tidak bekerja dengan tanda kutip
Ananda
Mr.x dalam pertanyaan, null adalah sebagai string ... kasus Anda mungkin berbeda
Arsen Mkrtchyan
145

ini akan melakukan trik untuk Anda

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}
pengguna144390
sumber
22
sementara secara teknis ini berfungsi, double not (!!) adalah pemrograman faux-pas. Ini benar-benar setara dengan if(val), yang jauh lebih jelas untuk dibaca. Saya akan tetap berpegang pada itu (fyi Ujwal, !! val secara teknis harus bekerja di C atau C ++ juga) lihat di sini untuk javascript nilai 'kebenaran': janosch.woschitz.org/javascript-equality-comparison
Will Buck
2
bagaimana kalau (! Boolean (val))
thedjaney
1
!! hanya negatif ganda, jadi secara harfiah mengatakan jika (val.exists). Saya masih suka tampilannya!
Kurai Bankusu
12
ini akan gagal jika val = 0sejak !!0dinilai false
punkrockpolly
3
Ini bukan negatif ganda sederhana. Ini adalah negatif ganda yang mentransformasikan. Anda pada dasarnya mengubah variabel menjadi boolean. Ada banyak untuk mengatakan pada subjek tetapi cukup untuk mengatakan bahwa dalam kasus di mana variabel Anda 0, false, null, undefinedatau beberapa nilai seperti yang resolve ke truedengan satu!, Anda akan mendapatkan falseuntuk !!. Itu harus digunakan hemat jika sama sekali.
Guy Passy
83

Ada 3 cara untuk memeriksa "bukan nol". Rekomendasi saya adalah menggunakan Strict Not Version.

1. Strict Not Version

if (val !== null) { ... }

Versi Strict Not menggunakan "Algoritma Perbandingan Kesetaraan Yang Ketat" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 . Ini !==memiliki kinerja lebih cepat, daripada !=operator karena Algoritma Perbandingan Kesetaraan Ketat tidak mengetik nilai perkiraan.

2. Non-strict Bukan Versi

if (val != 'null') { ... }

Versi Non-ketat menggunakan "Algoritma Perbandingan Kesetaraan Abstrak" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 . Ini !=memiliki kinerja lebih lambat, daripada !==operator karena Algoritma Perbandingan Kesetaraan Abstrak nilai typecasts.

3. Ganda Bukan Versi

if (!!val) { ... }

Double Not Version !!memiliki kinerja lebih cepat, daripada Strict Not Version !==dan Non-Strict Not Version !=( https://jsperf.com/tfm-not-null/6 ). Namun, itu akan mengetik nilai "Falsey" seperti undefineddan NaNmenjadi False ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ) yang dapat menyebabkan hasil yang tidak terduga, dan memiliki keterbacaan yang lebih buruk karena nulltidak secara eksplisit dinyatakan.

tfmontague
sumber
Sangat aneh. !!valbekerja untuk saya tetapi val!==nullbelum. Kenapa sih?
TheLogicGuy
@TheLogicGuy - Apa tipe data dari val? console.log(typeof val).
tfmontague
jumlah. kode menghapus nilai "buruk" dari array (nol, 0 dll). Ini kodenya: pastebin.com/L7Z1BtuL
TheLogicGuy
1
@TheLogicGuy - Masalah Anda yang sebenarnya tidak ada hubungannya dengan null. NaN tidak memfilter dengan benar - itu akan selalu kembali benar. Ini seharusnya bekerja:! (IsNaN (val) && (typeof val! == "undefined")). Dalam Javascript ada konsep yang dikenal sebagai "Truthy" dan "Falsey". Operator double-not !!akan menghapus lebih dari sekadar null. Itu akan mengubah NaNdan undefinedmenjadi salah juga. Dan itu sebabnya array Anda menyaring dengan benar ketika menggunakan operator bukan ganda !!.
tfmontague
30

Gunakan !==seperti yang !=akan membawa Anda ke dunia keanehan tabel kebenaran JavaScript tidak transitif.

Plynx
sumber
Kecuali jika Anda ingin secara khusus memeriksa undefinedatau null. Dalam hal ini val != nullakan kembali trueuntuk undefinedatau nulltetapi tidak untuk nilai falsey lain seperti 0.
Eric H
8

Anda harus menggunakan not equalsoperator perbandingan ketat !==sehingga jika pengguna memasukkan "null"maka Anda tidak akan sampai ke else.

Berkutil
sumber
1
Susan Null tidak akan senang jika namanya tidak diterima dalam formulir entri data lol
Andez
5

Itu mungkin karena nilai valsebenarnya string "null"daripada nilai null.

ScottyUCSD
sumber
3

Ini seharusnya bekerja dengan baik ..

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }
vkGunasekaran
sumber
2

Jika Anda ingin dapat memasukkan 0 sebagai nilai yang valid:

if (!!val || val === 0) { ... }
punkrockpolly
sumber
1

Ini akan berhasil:

if (val) {
    alert("Not null");
} else {
    alert("Null");
}
Kemenkes
sumber