web-dev-qa-db-ja.com

JavaScriptオブジェクト-数字で始まるキー、許可?

これは許可されますか?

myObj = {};
myObj['4a56546s6d']

または、キーは次のような文字で始まる必要があります:

myObj = {};
myObj['x4a56546s6d']

両方を混ぜることはできますか?

myObj = {};
myObj['x4a56546s6d']
myObj['4a56546s6d']

何か(HTMLのIDなど)は文字で始める必要があるので、私はそれを尋ねます。現時点では 番目のバージョン があり、fireBugはキー(数字で始まる)を青でマークしています。

29
user970727

[string]を使用してキーにアクセスする場合は、スペースのあるキーも含め、任意のキーを使用できます。これらはすべて有効です:

myObj['key with space']
myObj['12345']

ただし、ドット.演算子を使用してキーにアクセスする場合、キーは有効な識別子である必要があります。つまり、数字で始めたりスペースを含めることはできません。

54
taskinoor

ドット演算子を使用すると、スペースまたは特殊文字を含まないキー、つまり数値から始まる単語(つまり、変数名として使用できないもの)から値にアクセスできます。そうでない場合は、次のようにそれらに参照できます。連想配列のキー。

必要に応じてキーとして使用できますが、キーは入力した内容の文字列表現になることに注意してください。明確化-toString()と呼ばれます。

見て:

_ var myObj = {};

 myObj[ 3 ] = "key is 3";
 alert( myObj[ "3" ] ); //alerts "key is 3" because (3).toString() is "3"
 //but an error will thrown  when accessing  by myObj.3

 myObj[ {} ] = "key is {}" 
 alert( myObj["[object Object]"] ) // alerts "key is {}" because ({}).toString() is "[object Object]"
_

toString() methodをオーバーライドできます。例:

_Object.prototype.toString = function(){ return "object"}

a = {};
a[ {} ] = "whatever";
alert( a["object"] ); // alerts "whatever" because as now toString() returns "object" from each created object
_
18
abuduba

このページを参照してください: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables

JavaScript識別子は、文字、アンダースコア(_)、またはドル記号($)で始まる必要があります。後続の文字も数字(0-9)にすることができます。 JavaScriptでは大文字と小文字が区別されるため、文字には「A」〜「Z」(大文字)の文字と「a」〜「z」(小文字)の文字が含まれます。

そのように使用できますが、myObj.4a56546s6dを使用してデータにアクセスすることはできません。数字で始まる識別子は許可されていないためです。

7
Niels

キー(プロパティ名)が文字列リテラルの場合、最初の文字が数字であっても完全に有効です。

JSの有効なキーの詳細については、 this 質問の回答を参照してください。

0
KL-7