Faldgruber i JavaScript

by Jesper november 30, 2009 13:53

parceInt bruger octet som standard

Man må bare elske den måde hvorpå parseInt virker på. Ikke så meget vrøvl – bare resultater.

var width = parseInt(“153px”);

giver helt som forventet: 153. Ingen behov for at fjerne enheder fra strengen først, som i c#. Det virker bare.

Men hvad sker der så når man prøver med:

var id = parseInt(“009”);

Man får “0” – det viser sig nemlig at parseInt bruger octet som udgangspunkt, og det første tal fra systemet er “0”, da 9 jo ikke er et tal i octet, ignoreres det blot, som var det en hvilken som helst anden enhedsangivelse. Man kan tvinge 10-talsystemet ved at angive radix:

var id = parseInt(“009”, 10);

En streng er ikke en streng

Ikke alle er klar over at JavaScript faktisk kan representerer en streng på to forskellige måder: Som en primitiv og som et objekt.

var a = "Jeg er en primitiv";
var b = new String("Jeg er et objekt");

alert(typeof a == typeof b); // Vil alerte 'false'

Hvis man har kode der laver type-check, kan man altså ikke bare nøjes med:

if (typeof var1 == "string")
    ...

DOM id’er

Brug ikke DOM id’er som variabelnavn. Det giver “object undefined” fejl i IE. Brug namespacing…

Replace er ikke global

Hvis du vil foretage en udskiftning af karakterer i en streng, skal du bruge en RegExp som parameter, ellers er det kun første forekomst der udskiftes:

var headline = "Min overskrift på artiklen";

var itemname = headline.replace(" ", "_");
// Giver: Min_overskrift på artiklen

var itemname = headline.replace(/ /g, "_");
// Giver: Min_overskrift_på_artiklen

Coder on..

Tags:

JavaScript

Kommentarer

01-12-2009 02:32:15 #

Arne Vajhøj

At heltal som starter med 0 opfattes som oktaler er ret almindeligt. Nok mest i kilde kode, men det burde ikke overraske at det også kunne ske ved en streng parse.

Arne Vajhøj United States

Kommentarerne er lukkede

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen | Modified by Mooglegiant

About

Mit navn er Jesper Jensen, og jeg arbejder til dagligt som web-udvikler hos DGI, hvor mit speciale er klientside applikationer. Før det var jeg nogle år i robotbranchen, hvor jeg arbejdede med 3D simulering og system koordinering. Jeg elsker webudvikling, og specielt JavaScript har min interesse. Jeg har blogget om mine oplevelser med udvikling siden 2004

Calendar

<<  marts 2010  >>
mationtofr
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar

RecentComments

Comment RSS