Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Märkligt problem med for .. in loop

Postades av 2010-02-20 15:46:25 - Jonas Sjöblom, i forum javascript/dhtml, Tråden har 3 Kommentarer och lästs av 1814 personer

Hej, jag har en array som när man gör arraynamn.length ger svaret 1 men i en for in-loop ger 2 svar.

Fullständiga koden ser ut såhär:

Object.prototype.Inherits = function( parent )
{
    if( arguments.length > 1 )
    {
        parent.apply( this, Array.prototype.slice.call( arguments, 1 ) );
    }
    else
    {
        parent.call( this );
    }
}

Function.prototype.Inherits = function( parent )
{
    this.prototype = new parent();
    this.prototype.constructor = this;
}

function Shape(posx, posy)
{
    this.posx = posx;
    this.posy = posy
}

Rectangle.Inherits(Shape);
function Rectangle(posx, posy, width, height)
{
    this.Inherits(Shape, posx, posy);
    
    this.width = width;
    this.height = height;
}

// Kör koden
var rect = new Rectangle();
var list = new Array();
list.push(rect);
alert('Listans längd: ' + list.length);
for(var index in list)
{
    alert('index: ' + index);
}



De 2 första inherits-funktionerna har jag fått härifrån ( http://www.coolpage.com/developer/javascript/Correct%20OOP%20for%20Javascript.html ) och det var när jag försökte få in någon typ av arv i Rectangle-funktionen mha dem som problemen började.

for-loopen returnerar först 0 som den ska, men sedan körs den ännu en gång och returnerar "Inherits"
Jag förstår inte alls varför, skulle någon kunna förklara och berätt ahur jag kommer runt det? :)


Svara

Sv: Märkligt problem med for .. in loop

Postades av 2010-02-21 21:50:13 - Per Persson

JavaScripts for(... in ...) loopar inte genom en arrays element utan ett objekts egenskaper/metoder.

Raden var list = new Array(); skapar ett arrayobjekt. Detta objekt har en egenskap 'Inherits', vilken du skapade med raden Object.prototype.Inherits = function( parent ) { ...}. Du lägger sedan till elementet rect till arrayen. Detta betyder att en ny egenskap med ett numeriskt namn (i detta fall '0') skapas i objektet. Egenskapens värde blir elementet/objektet rect.

När du sedan loopar genom list med for(... in ...) hämtas de två egenskaperna: '0' och 'Inherits'.

Om du testar koden i andra webbläsare, t.ex. Firefox, kan det hända att du få ut fler egenskaper genom loopen, egenskaper som webbläsaren har fördefinierade för objektet.

För att loopa genom en array så som du vill, gör så här:

var l = list.length;
for(var i=0; i<l; i++)
{
    alert('index: ' + i + '; value: ' + list[i]);
}


Svara

Sv:Märkligt problem med for .. in loop

Postades av 2010-02-22 18:23:44 - Jonas Sjöblom

Tack för det utförliga svaret!
Det är ju lite synd då att det inte finns någon for each eller mostvarande loop. Att skriva en traditionell for loop är ju lite jobbigt, men visst går det :)


Svara

Sv: Märkligt problem med for .. in loop

Postades av 2010-02-24 10:53:02 - Henrik Malmberg

Det går, med hasOwnProperty()

var y = new Array('x','y','z');
var result = '';
for (var x in y)
  if(y.hasOwnProperty(x))
    result += x + ': ' + y[x] + '\n';

alert(result);


https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 616
27 958
271 741
10 151
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies