0

Object(連想配列のような) データの一部が利用可能かどうかを確認していますが、利用可能かどうかを確認しているステートメントでundefined正確にエラーが発生しています!ifundefined

私はObjectこのようなものを持っています:

var data = {
    1: {
        2: {
            3: [
                ["a","b"],
                ["c","d"],
            ],
        }
    }
}

私もdouble-quotes次のように試しました:var data = { "1": { "2": { ...

これらは、if私がすでに試したステートメントです。それらはすべて失敗し、ステートメントで正確にFirebug生成されます:TypeError: data[1][2][3] is undefinedif

if (typeof data[1][2][3] == "undefined") {
if (data[1][2][3] === undefined) { 
// when I have double quotes
if (typeof data["1"]["2"]["3"] == "undefined") {
if (data["1"]["2"]["3"] === undefined) { 

jsfiddle.net で確認したところ、正常に動作しました。if想像できるすべてのことを試しましたが、ステートメントで失敗する理由はまだわかりません。

アップデート

これを見てください。

ここに画像の説明を入力

4

5 に答える 5

2

が未定義の場合variable[1][2][3]、スクリプトvariable[1][2][3][4]は未定義かどうかをチェックできません。ツリーの深さ全体で undefined をチェックする必要があります

if(1 in variable)
{
  if(2 in variable[1])
  {
     if(3 in variable[1][2])
     {
       if(typeof variable[1][2][3][4] === 'undefined'){
          // Do something
       }
     }
  }
}
于 2013-04-22T09:17:02.183 に答える
1

いくつかの発言、おそらく解決策はその間にあります:

おそらく、ネガティブバージョンを使用したいでしょう

if (typeof data[1][2][3] !== "undefined") {

条件本体でそのデータに取り組んでいるように見えるので、 if 条件内で実際に定義されていることを確認したいですか? Atm、データが未定義の場合、コードが実行されます。

コードでこのオブジェクトを正確に使用していますか、またはこれはデモンストレーションのみを目的としていましたか? チェックdata[1][2][3]data[1][2]て既に未定義の場合、data[1][2][3]存在しないオブジェクトのプロパティにアクセスしようとしているため、アクセスしようとするとエラーがスローされるためです。

補足:数値インデックスがある場合は、オブジェクトの代わりに配列を使用する方が適切でしょうか?

于 2013-04-22T09:06:47.613 に答える
-1

未定義と比較しないでください...

定義されているかどうかを確認したい場合は、次のように IF 条件に配置するだけです...

var data = {
    1: {
        2: {
            3: [
                ["a","b"],
                ["c","d"],
            ],
        }
    }
}

if(data[1][2][3])
{
    alert("defined");
}
else
{
    alert("not defined");
}
于 2013-04-22T09:11:58.423 に答える