36

私は配列を持っています

    var assoc_pagine = new Array();
    assoc_pagine["home"]=0;
    assoc_pagine["about"]=1;
    assoc_pagine["work"]=2;

私は試した

    if (assoc_pagine[var] != "undefined") {

しかし、それは機能していないようです

私はjqueryを使用していますが、それが役立つかどうかわかりません

ありがとう

4

9 に答える 9

72

キーワードを使用してin、属性がオブジェクトで定義されているかどうかをテストします

if (assoc_var in assoc_pagine)

また

if ("home" in assoc_pagine)

ここにはかなりの数の問題があります。

まず、var変数の値が「home」、「work」、または「about」であると想定されていますか?それとも、「var」と呼ばれる実際のプロパティを検査することを意味しましたか?

var文字列値を持つ変数であると想定される場合、それvarはJavaScriptの予約語であり、などの別の名前を使用する必要があることに注意してくださいassoc_var

var assoc_var = "home";
assoc_pagine[assoc_var] // equals 0 in your example

「var」というプロパティを検査する場合は、引用符で囲む必要があります。

assoc_pagine["var"]

すると、undefinedと同じではありません"undefined"typeofオブジェクトタイプの文字列表現を取得する必要があります。

これはすべてのステップの内訳です。

var assoc_var = "home"; 
var value = assoc_pagine[assoc_var]; // 0
var typeofValue = typeof value; // "number"

だからあなたの問題を解決するには

if (typeof assoc_pagine[assoc_var] != "undefined") 

更新:他の回答が示しているように、アレイを使用することはこの問題の最善の解決策ではありません。代わりにオブジェクトの使用を検討してください。

var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
于 2010-04-10T11:31:37.527 に答える
16
var assoc_pagine = new Array();
assoc_pagine["home"]=0;

これにはを使用しないでくださいArray。配列は、数値インデックス付きリスト用です。プレーンObject{})を使用するだけです。

あなたが'undefined'文字列で考えているのはおそらくこれです:

if (typeof assoc_pagine[key]!=='undefined')

これは(多かれ少なかれ)言うことと同じです

if (assoc_pagine[key]!==undefined)

ただし、どちらにしても、これは少し醜いです。存在しない可能性のあるキーを間接参照し(これは、より賢明な言語ではエラーになります)、undefined存在しないプロパティに特別な値を与えるというJavaScriptの奇妙なハックに依存しています。

これは、プロパティが実際に存在しなかったかどうか、または存在したが明示的にundefined値に設定されているかどうかもわかりません。

これは、より明確で読みやすく、IMOの総合的な優れたアプローチです。

if (key in assoc_pagine)
于 2010-04-10T11:52:19.567 に答える
9

varはステートメントです...だから予約語です...だから別の言い方をしてください。そしてそれはそれを行うためのより良い方法です(===は==よりも優れています)

if(typeof array[name] !== 'undefined') {
    alert("Has var");
} else {
    alert("Doesn't have var");
}
于 2010-04-10T11:39:47.887 に答える
3

これはアレイではありません。次のように宣言することをお勧めします。

var assoc_pagine = {};
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;

また

var assoc_pagine = {
                 home:0,
                 about:1,
                 work:2
               };

オブジェクトにラベルが含まれているかどうかを確認するには、次のようにします。

if('work' in assoc_pagine){
   // do your thing
};
于 2010-04-10T15:07:39.127 に答える
1

TLDR; 私が思いつくことができる最善の方法はこれです:(ユースケースに応じて、この関数を最適化する方法はいくつかあります。)

function arrayIndexExists(array, index){
    if ( typeof index !== 'number' && index === parseInt(index).toString()) {
        index = parseInt(index);
    } else {
        return false;//to avoid checking typeof again
    }
    return typeof index === 'number' && index % 1===0 && index >= 0 && array.hasOwnKey(index);
}

他の回答の例は近づき、いくつかの(おそらくほとんどの)目的で機能しますが、以下で説明する理由により、技術的にはかなり正しくありません。

Javascript配列は、「数値」キーのみを使用します。配列に「連想キー」を設定すると、実際には、その配列の要素ではなく、その配列オブジェクトにプロパティが設定されます。たとえば、これは、Array.forEach()を使用するときに「連想キー」が繰り返されず、Array.lengthの計算時に含まれないことを意味します。(これの例外は、「0」のような文字列は配列の要素に解決されますが、「0」のような文字列は解決されません。)

さらに、存在しない配列要素またはオブジェクトプロパティをチェックしても、未定義と評価されますが、実際には、配列要素またはオブジェクトプロパティがまだ設定されていないことはわかりません。たとえば、undefinedは、returnステートメントで終了しない関数を呼び出した結果でもあります。これにより、奇妙なエラーが発生し、コードのデバッグが困難になる可能性があります。

これは混乱を招く可能性がありますが、ブラウザのjavascriptコンソールを使用して非常に簡単に調べることができます。(私はクロムを使用しました。各コメントはその前の行の評価値を示しています。);

var foo = new Array();
foo;
//[]
foo.length;
//0
foo['bar'] = 'bar';
//"bar"
foo;
//[]
foo.length;
//0
foo.bar;
//"bar"

これは、連想キーが配列内の要素にアクセスするためではなく、オブジェクトのプロパティに使用されることを示しています。

foo[0] = 0;
//0
foo;
//[0]
foo.length;
//1
foo[2] = undefined
//undefined
typeof foo[2]
//"undefined"
foo.length
//3

これは、typeofをチェックしても、要素が設定されているかどうかを確認できないことを示しています。

var foo = new Array();
//undefined
foo;
//[]
foo[0] = 0;
//0
foo['0']
//0
foo[' 0']
//undefined

これは、前述の例外と、parseInt()を使用できない理由を示しています。

連想配列を使用する場合は、他の回答で推奨されているように、単純なオブジェクトを使用することをお勧めします。

于 2015-01-04T06:49:16.953 に答える
1
if (assoc_pagine.indexOf('home') > -1) {
   // we have home element in the assoc_pagine array
}

Mozilla indexOf

于 2018-04-09T14:45:25.973 に答える
1

これは私のために働いた

if (assoc_pagine[var] != undefined) {

代わりにこれ

if (assoc_pagine[var] != "undefined") {
于 2019-02-22T06:59:09.133 に答える
0
function isset(key){
ret = false;
array_example.forEach(function(entry) {
  if( entry == key ){
    ret = true;
  }
});
return ret;
}

alert( isset("key_search") );
于 2013-12-18T13:28:35.833 に答える
0

最も効果的な方法:

if (array.indexOf(element) > -1) {
   alert('Bingooo')
}

W3Schools

于 2018-04-30T12:02:39.377 に答える