設置我有一個數組檢查數組項目在JS
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
我試圖
if (assoc_pagine[var] != "undefined") {
,但它似乎沒有工作
我使用jquery,我不知道它是否可以幫到
謝謝
設置我有一個數組檢查數組項目在JS
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
我試圖
if (assoc_pagine[var] != "undefined") {
,但它似乎沒有工作
我使用jquery,我不知道它是否可以幫到
謝謝
使用in
關鍵字測試如果一個屬性在一個對象
if (assoc_var in assoc_pagine)
OR
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")
更新:至於其他的答案表明,使用陣列是不是這個問題的最佳sollution。考慮使用對象代替。
var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
var是一個語句...所以這是一個保留字......所以只是把它的另一種方式。 這就是做一個更好的方式(===比==更好)
if(typeof array[name] !== 'undefined') {
alert("Has var");
} else {
alert("Doesn't have var");
}
var assoc_pagine = new Array();
assoc_pagine["home"]=0;
不要使用此一Array
。數組用於數字索引列表。只需使用普通的Object
({}
)。
你所用'undefined'
串想着大概是這樣的:
if (typeof assoc_pagine[key]!=='undefined')
這話說
if (assoc_pagine[key]!==undefined)
然而,無論哪種方式,這是一個有點(或多或少)相同醜陋。您正在取消引用可能不存在的關鍵字(這在任何更明智的語言中都是錯誤的),並且依賴於JavaScript的奇怪黑客手段,爲您提供不存在的屬性的特殊undefined
值。
這也不完全告訴你,如果屬性真的不是那裏,或者如果它存在但明確設置爲undefined
值。
這是一個更加明確,可讀性和IMO全方位的更好的方法:
if (key in assoc_pagine)
這不是一個數組。 更好的聲明這樣說:
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
};
function isset(key){
ret = false;
array_example.forEach(function(entry) {
if(entry == key){
ret = true;
}
});
return ret;
}
alert(isset("key_search"));
這根本不起作用。 – Omn 2015-01-04 06:47:58
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'字符串不會)。
此外,檢查不存在的數組元素或對象屬性會評估因爲未定義,但實際上並沒有告訴你數組元素或對象屬性尚未設置。例如,未定義也是通過調用不以return語句終止的函數得到的結果。這可能會導致一些奇怪的錯誤和難以調試的代碼。
這可能令人困惑,但可以使用瀏覽器的javascript控制檯輕鬆探索。 (我使用了chrome,每個註釋都表示它之前的行的評估值)。
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函數();
如果你想使用關聯數組,你最好使用簡單的對象作爲其他答案的建議。
javascript中的數組不使用關聯鍵。在數組上設置「關聯鍵」時,實際上是在該數組對象上設置一個屬性,而不是該數組的一個元素。這意味着使用Array.forEach()時,「關聯鍵」不會被迭代,並且在計算Array.length時不會被包含。如果你想「關聯數組」使用下面提到的對象。如果你想看看一個對象是否有屬性,請參閱這個答案:http://stackoverflow.com/questions/135448/how-do-i-check-if-an-object-has-a-property-in- javascript – Omn 2015-01-04 03:19:08