« timer-lib.js | Main | Språkets kjerne og objektmodeller »

IE scope problem

I går fikk jeg et interessant problem fra en tidligere arbeidskollega. Jeg har lagt opp test-caset som viser problemet, eventuelt mangelen på sådann (en takk til Øyvind som lagde caset). Mozilla takler dette helt fortreffelig og mener at tall fortsatt er tall. IE påstår derimot at et tall er ikke et tall, men et objekt. Hvilket selvfølgelig er interessant da dette problemet ikke inntreffer dersom du forsøker deg på:

var foo = new Number(8);<br>alert(foo instanceof Number);

(Men legg merke til at var foo = 8; alert(foo instanceof Number); gir 'false' som svar)

Problemet er altså at en objektreferanse til et Number-objekt sendt som et argument til en funksjon i et annet vindu (rammer er jo også vindusobjekter) ikke lenger er et skikkelig Number-objekt. Efter mye frem og tilbake samt en tur med gravemaskin i Microsofts JScript-dokumentasjon bestemte vi oss for at det beste var kanskje å finne en egenskap som identifiserte tallet. Ikke overraskende mener IE at konstruktøren til 'foo' er et tall, slik at følgende lille kodesnutt funker i IE:

if(n.constructor.toString().indexOf("Number") != -1) { }

Ordentlig bakvendt i mine øyne, men det fungerer.

About

This page contains a single entry from the blog posted on Februar 11, 2003 3:19 EM.

The previous post in this blog was timer-lib.js.

The next post in this blog is Språkets kjerne og objektmodeller.

Many more can be found on the main index page or by looking through the archives.