Hero Image

Using reserved words is bad for your health

Att felsöka JavaScript kan vara lite klurigt. Det gäller som så ofta annars att ju dummare fråga, desto svårare att finna svaret. Dagens dumma fel bestod i ett JSON-objekt som hade en egenskap vid namn class. class är ett reserverat ord i Javascript. Allt fungerade fint i IE9 och Chrome. En kollega påpekade att det blev ett fel i hennes sida, och hon hade IE8. Felmeddelandet var ett sparsmakat "Förväntad identifierare". Jag gissade att det var något med parsningen till JSON, men det visade sig inte vara felet.

Två saker jag inte hade klart för mig: Var reserverade termer "räknas" (se nedan) och att även termer som ännu inte används är reserverade.
Var reserverade termer inte får förekomma är olika för olika webbläsare. Nedanstående text är hämtat från Mozilla, och detta stämde inte överrens med IE7/8:

Reserved Words actually only apply to Identifiers (vs. IdentifierNames) . As described in es5.github.com/#A.1, these are all IdentifierNames which do not exclude ReservedWords.

a.import

a["import"]

a = { import: "test" }.

On the other hand the following is illegal because it's an Identifier, which is an IdentifierName without the Reserved Words. Identifiers are used for FunctionDeclaration and FunctionExpression.

function import() {}

(källa: https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words)

Svaret hittade jag förstås här.

För att inte göra samma fel igen ska jag hårdplugga in Mozillas lista över reserverade ord.

Fler, för hälsan dåliga, saker finner du här.