3

連想配列を作成したい:

var aa = {} // Equivalent to Object(), new Object(), etc...

そして、私がアクセスするすべてのキーが数字になることを確認したいと思います。

aa['hey'] = 4.3;
aa['btar'] = 43.1;

JavaScriptには入力機能がないことを知っているので、これを自動的にチェックすることはできませんが、自分のコードで、これに文字列のみを割り当てることを確認できますaa

今、私はユーザーからキーを取得しています。そのキーの値を表示したい。ただし、ユーザーが「toString」のようなものを私に与えた場合、ユーザーはintではなく関数を返します。ユーザーが私に与える文字列が私が定義したものだけであることを確認する方法はありますか?

唯一の解決策は次のようなものですか?

delete aa['toString'];
delete aa['hasOwnProperty'];

等...

4

3 に答える 3

4

1つの可能性は、hasOwnPropertyを使用して、キーが配列に明示的に追加したものであることを確認することです。したがって、代わりに:

function findNumber(userEnteredKey) {
    return aa[userEnteredKey];
}

あなたは言うだろう:

function findNumber(userEnteredKey) {
    if (Object.prototype.hasOwnProperty.call(aa, userEnteredKey))
        return aa[userEnteredKey];
}

または、typeofを使用して、数値を返す前に何かが数値であることを確認することもできます。しかし、私はhasOwnPropertyアプローチが好きです。なぜなら、意図的に配列に入らなかったものを返すことができないからです。

于 2008-12-15T04:10:56.047 に答える
4

これはあなたのために働くかもしれません:

function getValue(id){
  return (!isNaN(aa[id])) ? aa[id] : undefined;
}

または、次の一般的なソリューションをお勧めします。

function getValue(hash,key) {
    return Object.prototype.hasOwnProperty.call(hash,key) ? hash[key] : undefined;
}

次の点に注意してください。キーは実際には属性の名前であるため、キーは内部で文字列に変換されます。

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". It 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".
于 2008-12-15T04:12:08.383 に答える
2

新しいキーを作成するときは、独自の文字列定数を前に付けます。

var a = {};
var k = 'MYAPP.COLLECTIONFOO.KEY.';

function setkey(userstring)
{
  a[k + userstring] = 42;
}

function getkey(userstring)
{
  return a[k + userstring];
}
于 2008-12-15T13:02:27.050 に答える