null
の2つの配列myArray1とmyArray2がある場合、どのように出力するかは、1つの配列は空ではありませんか?Javascript:少なくとも1つの空でない配列のテスト(配列の1つがnullの場合)
myArray1 = ["one", "two", "three"]; //-> non-empty array
myArray2 = null; //-> not an array (in my case this happens from .match() returning no results)
私が表現したい、myArray1 && myArray2
はFALSEになりますが、myArray1 || myArray2
がTRUEになるような:私は次の変数を持っていると仮定すると
。
私は他の関連するスタックオーバーフローの質問(下記の要約リストを参照)を見ましたが、解決策を見つけるのにまだ苦労していたので、回答が別の質問として投稿すると思いました。
空の配列を試験する一般的な方法は次のとおりです。
myBooleanOr = (myArray1.length || myArray2.length); //3
myBooleanAnd = (myArray1.length && myArray2.length); //Error
両方の変数が配列されているが、この場合には、二つ目は、エラーをスローします場合は、この作品:「のプロパティの長さを読み取ることができませんnull '以下も同じエラーをスローしますので、Boolean()
機能を使用すると、問題が解決しない:
myBooleanAnd = (Boolean(myArray1.length) && Boolean(myArray2.length)); //error
いくつかのスタックオーバーフローの質問に受け入れられた空の配列をテストするためのソリューションはtypeof myArray !== "undefined"
を使用することですが、それはまだありません配列のどちらも"undefined"
と一致しているためmyBooleanAndはまだエラーアップスローされますので、問題を解決:
var bool = (typeof myArray1 !== "undefined"); //true
var bool = (typeof myArray2 !== "undefined"); //true
var myBooleanAnd = ((typeof myArray1 !== "undefined" && myArray1.length) || (typeof myArray2 !== "undefined" && myArray2.length)); //Error: cannot read property length of null
もまた、動作しない、直感的なようだ[]
、反対の配列を比較し、配列のどちら理由一致[]
:
var bool = (myArray1 !== []); //true
var bool = (myArray2 !== []); //true
その他の関連記事
を含む空のJavaScript配列のためのテストとスタックオーバーフローの契約上の他の質問の数:空の配列のための
- テスト:Check if array is empty or exists
- テスト空の配列(jQuery)の場合:Check if array is empty or null
- Relat空のオブジェクトに対してTesting for an empty array
- テスト:空の配列をテストするための方法のIVE利点How do I test for an empty JavaScript object?
およびJavaScriptでの空の配列の真理値についての質問もあります
は、更新
元の質問に記載されている以下のエラーを修正しました(指摘した人のおかげ)。他の人にも役立つかもしれないので、ここにリストしています:
- ==!
typeof x === "undefined"
はJavaScriptには、 '==!'演算子はありません。あなたが探している演算子は '!=='です。 – JLRishe
@JLRhehe hm私はそれについて疑問を抱いていましたが、私はそれらの両方をテストしましたが、どちらも機能します...それは「ベストプラクティス」の問題なのでしょうか? – ATJ
いいえ、どちらもありません。 '==!'は '==! 'の不十分な間隔に相当します。つまり' 1 ==!' a''→ '1 == false'→' false'です。あなたが '==!'をどこでも使っているなら、あなたのコードの多くがあなたの期待とは異なる行動をとると思います。 – JLRishe