JavaScriptでnull値を確認する方法私は以下のコードを書きましたが、うまくいきませんでした。
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
そして、どうすれば私のJavaScriptプログラムのエラーを見つけることができますか?
Javascriptは、「null」値のチェックに関して非常に柔軟です。私はあなたが実際に空の文字列を探していると推測していますが、この場合、この単純なコードが機能します:
if(!pass || !cpass || !email || !cemail || !user){
空の文字列(""
)、null
、undefined
、false
、および番号0
およびNaN
をチェックします
数値を明確にチェックしている場合、このメソッドで0
を見逃すのはよくある間違いであり、num !== 0
が好ましい(またはnum !== -1
または~num
(ハッキーコード)また、-1
)に対してチェックする-1
を返す関数について、たとえばindexOf
)
Null LYをチェックするには、これを使います。
if(variable === null && typeof variable === "object")
...またはもっと簡単に:
if(variable === null)
このテストはONLYがnull
に合格し、""
、undefined
、false
、0
、またはNaN
に合格しません。
これの残りはinorganikのコメントへの応答です、はい、あなたはそれぞれを個別にチェックすることができます。
あなたのチェックで絶対に確実にするためにはabsolutely equals: ===
とtypeof
の使用を実装する必要があります。
ここでJSFiddleを作成して、動作している個々のテストすべてを表示します
これがテストのすべての出力です。
Null Test:
if(variable === null && typeof variable === "object")
- 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 === "" && typeof variable === "string")
- 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(variable === undefined && typeof 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 && typeof variable === "boolean")
- 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 && typeof variable === "number")
- 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(!parseFloat(variable) && variable != 0 && typeof variable === "number")
- 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
ご覧のとおり、NaN
に対してテストするのは少し難しいです。
厳密な等価演算子: - /
私たちは、===
でヌルを確認することができます
if ( value === null ){
}
if
を使うだけで
if( value ) {
}
値が でない場合、真と評価されます。
まず、関数本体のないreturn文があります。たぶん、それはエラーを投げるでしょう。
あなたのチェックをするためのよりきれいな方法は単に使うことです。オペレーター:
if (!pass || !cpass || !email || !cemail || !user) {
alert("fill all columns");
}
明示的にnull
をチェックすることで、単純化された構文で、受け入れられた答えを改善
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");
}
javaScriptで undefined および null をチェックするには、次のように記述するだけです。
if (!var) {
console.log("var IS null or undefined");
} else {
console.log("var is NOT null or undefined");
}
最後にtry catchを使うことができます
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 {}
あなた自身のエラーをthrow
することもできます。 this を参照してください。
これは、NaNのチェックに関するWebWandererのソリューションに対するコメントです(正式なコメントを残すにはまだ十分な担当者がいません)。解は次のようになります。
if(!parseInt(variable) && variable != 0 && typeof variable === "number")
しかし、これは0
のようにvariable = 0.1
に丸められる有理数の場合は失敗します。より良いテストは次のようになります。
if(isNaN(variable) && typeof variable === "number")
JavaScriptでは、null
と同じ文字列はありません。
pass
が空の文字列である場合、pass == null
がtrueであることを期待していたかもしれません。ルーズ等価演算子==
はある種の型強制を実行することを知っているからです。
たとえば、次の式は真です。
'' == 0
対照的に、厳密な等価演算子===
はこれが偽であると言います:
'' === 0
''
と0
がおおよそ等しいと仮定すると、''
とnull
はおおよそ等しいと推測するかもしれません。しかしそうではありません。
この式は偽です。
'' == null
任意の文字列をnull
と比較した結果はfalseです。したがって、pass == null
およびその他すべてのテストは常にfalseであり、ユーザーは警告を受け取りません。
コードを修正するには、各値を空の文字列と比較します。
pass === ''
pass
が文字列であることが確実な場合は、空の文字列だけが空の文字列と大体等しいので、pass == ''
も機能します。一方、ルーズ等価演算子が実行する型強制を特に実行したくない場合を除いて、JavaScriptでは常に厳密な等価を使用することをお勧めします。
どの値の組が大体等しいか知りたい場合は、このトピックに関する Mozillaの記事の - 「Sameness比較」の表を参照してください。
値がnullまたは未定義であることを確認するには、lodashモジュールを使用できます。
_.isNil(value)
Example
country= "Abc"
_.isNil(country)
//false
state= null
_.isNil(state)
//true
city= undefined
_.isNil(state)
//true
pin= true
_.isNil(pin)
// false
実際にはif (value !== null || value !== undefined)
を使う必要があるかもしれないと思います。なぜならあなたがif (value)
を使うのであれば、0や偽の値をフィルターすることもできるからです。
これら二つの機能を考慮しなさい:
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
私の状況では、値がnullで未定義であるかどうかをチェックするだけでよく、0
、false
、''
の値をフィルタリングしたくありませんでした。だから私は2番目のテストを使いましたが、あなたもそれらをフィルタリングする必要があるかもしれません。
これはexのためにDBから来るブール値の場合には機能しません。
value = false
if(!value) {
// it will change all false values to not available
return "not available"
}
投票する前によく見てください。
_ javascript _ 内の変数変数が 宣言されている で値が割り当てられていない場合、その型はundefined
です。そのため、たとえそれが value の代わりに instance を保持するobject
であったとしても、変数をチェックすることができます。
true
を返すnullをチェックするためのヘルパーメソッドを作成し、それをAPIで使用します。
変数が空かどうかをチェックするヘルパー関数:
function isEmpty(item){
if(item){
return false;
}else{
return true;
}
}
try-catch例外的なAPI呼び出し:
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;
}
}
いくつかのテストケース:
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));
私は不思議に思うこの非常に単純な関数を作りました:
function safeOrZero(route) {
try {
Function(`return (${route})`)();
} catch (error) {
return 0;
}
return Function(`return (${route})`)();
}
そのルートは、爆発する可能性があるあらゆる価値連鎖です。 jQuery/cheerioやオブジェクトなどに使います。
例1:このconst testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];};
のような単純なオブジェクト.
しかし、それも私たちが作ったこともないような非常に大きな物かもしれません。それで私はそれを通過させる:
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
もちろん、null
や'No value'
...を使うことができます。あなたのニーズに合うものなら何でも。
通常、DOMクエリまたはjQueryセレクタは、見つからない場合はエラーをスローします。しかし、のようなものを使用して:
const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
[...]
}
値がnullかどうかをテストする別の方法を見つけました。
if(variable >= 0 && typeof variable === "object")
null
は、number
とobject
として同時に機能します。 null >= 0
またはnull <= 0
を比較すると、true
になります。 null === 0
またはnull > 0
またはnull < 0
を比較するとfalseになります。しかしnull
もオブジェクトなので、nullとして検出できます。
私はより複雑な関数を作りました natureof witchはtypeofよりもうまくいくでしょうし、どのタイプを含めるかグループ化しておくべきかを言うことができます
/* function natureof(variable, [included types])
included types are
null - null will result in "undefined" or if included, will result in "null"
NaN - NaN will result in "undefined" or if included, will result in "NaN"
-infinity - will separate negative -Inifity from "Infinity"
number - will split number into "int" or "double"
array - will separate "array" from "object"
empty - empty "string" will result in "empty" or
empty=undefined - empty "string" will result in "undefined"
*/
function natureof(v, ...types){
/*null*/ if(v === null) return types.includes('null') ? "null" : "undefined";
/*NaN*/ if(typeof v == "number") return (isNaN(v)) ? types.includes('NaN') ? "NaN" : "undefined" :
/*-infinity*/ (v+1 === v) ? (types.includes('-infinity') && v === Number.NEGATIVE_INFINITY) ? "-infinity" : "infinity" :
/*number*/ (types.includes('number')) ? (Number.isInteger(v)) ? "int" : "double" : "number";
/*array*/ if(typeof v == "object") return (types.includes('array') && Array.isArray(v)) ? "array" : "object";
/*empty*/ if(typeof v == "string") return (v == "") ? types.includes('empty') ? "empty" :
/*empty=undefined*/ types.includes('empty=undefined') ? "undefined" : "string" : "string";
else return typeof v
}
// DEMO
let types = [null, "", "string", undefined, NaN, Infinity, -Infinity, false, "false", true, "true", 0, 1, -1, 0.1, "test", {var:1}, [1,2], {0: 1, 1: 2, length: 2}]
for(i in types){
console.log("natureof ", types[i], " = ", natureof(types[i], "null", "NaN", "-infinity", "number", "array", "empty=undefined"))
}