Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript Object - Key beginning with number, allowed?

Is this allowed?

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

Or the key must start with a letter like:

myObj = {};
myObj['x4a56546s6d']

Can I mix both like:

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

I ask that because somethings (for example an ID in HTML) must begin with a letter. I have at the moment the third version and the fireBug marks the keys (beginning with a number) blue.

like image 543
user970727 Avatar asked Jan 02 '12 08:01

user970727


People also ask

Can an object key start with a number?

operator to access the key then the key must be a valid identifier which means they can not begin with a number or contain space.

Can a JavaScript object key be a number?

Against what many think, JavaScript object keys cannot be Number, Boolean, Null, or Undefined type values. Object keys can only be strings, and even though a developer can use other data types to set an object key, JavaScript automatically converts keys to a string a value.

Can object properties be numbers JavaScript?

According to the official JavaScript documentation you can define object literal property names using integers: Additionally, you can use a numeric or string literal for the name of a property.


3 Answers

You can use any key if you use [string] to access the key, even key with space. All of these are valid:

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

But if you want to use dot . operator to access the key then the key must be a valid identifier which means they can not begin with a number or contain space.

like image 80
taskinoor Avatar answered Oct 02 '22 15:10

taskinoor


By dot operator you can get access to values from keys which not contains either space's or special characters, words starting from number( that is, those that can't be used as eg variable names) otherwise you can get any reffering to them like as keys in associative array.

You can use as key as everything you want but remember the key will be a string representation of what you put in. Clarifying - will be called toString().

Look:

 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]" 

You can override toString() method , eg:

Object.prototype.toString = function(){ return "object"}  a = {}; a[ {} ] = "whatever"; alert( a["object"] ); // alerts "whatever" because as now toString() returns "object" from each created object 
like image 39
abuduba Avatar answered Oct 02 '22 17:10

abuduba


See this page: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables

A JavaScript identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9). Because JavaScript is case sensitive, letters include the characters "A" through "Z" (uppercase) and the characters "a" through "z" (lowercase).

You can use it that way, but you won't be able to access the data by using myObj.4a56546s6d because starting an identifier with a number is not allowed.

like image 41
Niels Avatar answered Oct 02 '22 17:10

Niels