Будет ли это работать для вас?
function getValue(id){
return (!isNaN(aa[id])) ? aa[id] : undefined;
}
Обновление:
С помощью Moss Collum и pottedmeat Я рекомендую это общее решение:
function getValue(hash,key) {
return Object.prototype.hasOwnProperty.call(hash,key) ? hash[key] : undefined;
}
Update2:
Забыл ".call". (спасибо pottedmeat за указание на это)
Обновление3: (О ключе)
Обратите внимание на следующее: ключ будет внутренне преобразован в строку, потому что ключ на самом деле является именем атрибута.
var test = {
2:"Defined as numeric",
"2":"Defined as string"
}
alert(test[2]); //Alerts "Defined as string"
При попытке использовать объект:
var test={}, test2={};
test[test2]="message"; //Using an object as a key.
alert(test[test2]); //Alerts "message". Looks like it works...
alert(test[ test2.toString() ]);
//If it really was an object this would not have worked,
// but it also alerts "message".
Теперь, когда вы знаете, что это всегда строка, давайте использовать ее:
var test={};
var test2={
toString:function(){return "some_unique_value";}
//Note that the attribute name (toString) don't need quotes.
}
test[test2]="message";
alert(test[ "some_unique_value"] ); //Alerts "message".