133

オブジェクトのキー名として数値型を使用すると、常に文字列に変換されるようです。実際に数値として格納する方法はありますか? 通常の型キャストは機能していないようです。

例:

var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);

方向出力:

{
    '1': 'a value'
}

私が欲しいのはこれです:

{
    1: 'a value'
}

アドバイス?

4

9 に答える 9

150

いいえ、これは不可能です。 キーは常に文字列に変換されます。プロパティアクセサーのドキュメントを参照してください

プロパティ名は文字列である必要があります。これは、文字列以外のオブジェクトをオブジェクトのキーとして使用できないことを意味します。数値を含む文字列以外のオブジェクトは、toStringメソッドを介して文字列に型キャストされます。

> var foo = {}
undefined

> foo[23213] = 'swag'
'swag'

> foo
{ '23213': 'swag' }

> typeof(Object.keys(foo)[0])
'string'
于 2010-09-03T06:04:26.540 に答える
36

オブジェクトではありませんが、このアプリケーションではMapが非常に役立つことがわかりました。ここでは、キーベースのイベントである数値キーに使用しました。

onKeydown(e) {
  const { toggleSidebar, next, previous } = this.props;

  const keyMapping = new Map([
    [ 83, toggleSidebar ],  // user presses the s button
    [ 37, next          ],  // user presses the right arrow
    [ 39, previous      ]   // user presses the left arrow
  ]);

  if (keyMapping.has(e.which)) {
    e.preventDefault();
    keyMapping.get(e.which)();
  }
}
于 2016-05-31T16:46:02.800 に答える
13

ECMA-262-5 の仕様のようです:

プロパティ識別子タイプは、プロパティ名をプロパティ記述子に関連付けるために使用されます。プロパティ識別子型の値は、(名前、記述子) の形式のペアです。ここで、名前は文字列で、記述子はプロパティ記述子の値です。

ただし、ECMA-262-3 には明確な仕様がありません。とにかく、文字列以外をプロパティ名として使用しようとはしません。

于 2010-09-03T07:08:24.493 に答える
2

このようなものが必要ですか?

var userId = 1;var myObject ={};
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);

コンソール: オブジェクト

1 : 「値」

于 2018-09-05T07:54:43.660 に答える
-1

これを試すことができます:

arr = {}
function f(a,b,c) {
      arr = arguments
}
f("*","#","_")
console.log(arr)
//returns Object { 0: "*", 1: "#", 2: "_" }```
于 2021-06-23T14:26:10.490 に答える
-4

JavaScript では数値文字列と数値は交換可能です。

myObject[1] == myObject['1']

数値をオブジェクトのキーにしたい場合は、配列 (new Array()またはで作成[]) が必要になる場合があります。

于 2010-09-03T06:02:56.850 に答える