Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[JS] Array-value in verkorte if / else

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik de volgende code in mijn statistieken scriptje:
JavaScript:
1
2
3
4
5
var ie  = (agt.indexOf("msie") != -1);

var plugins = new Array();
plugins['acrobat']     = (ie) ? 'PDF.PdfCtrl.5' : 'application/pdf';
plugins['flash']       = (ie) ? 'ShockwaveFlash.ShockwaveFlash.1' : 'application/x-shockwave-flash';

Ik wil dit graag iets korter noteren:
JavaScript:
1
2
3
4
5
6
var ie  = (agt.indexOf("msie") != -1);

var plugins = [
 ['acrobat', ((ie) ? 'PDF.PdfCtrl.5' : 'application/pdf')],
 ['flash'  , ((ie) ? 'ShockwaveFlash.ShockwaveFlash.1' : 'application/x-shockwave-flash')]
];

Maar dit werkt niet. Kan iemand mij vertellen wat ik fout doe? Als ik een vaste waarde invul, doet 'ie het wel:
JavaScript:
1
2
3
4
var plugins = [
 ['acrobat', 'PDF.PdfCtrl.5'],
 ['flash'  , 'ShockwaveFlash.ShockwaveFlash.1']
];

[ Voor 4% gewijzigd door Verwijderd op 27-10-2007 00:52 ]


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Als ik hier jouw code invoer, de middelste dus, met array in array, en ik gebruik Firebug, dan zie ik naderhand mooi de gevraagde inhoud in de var.

Afbeeldingslocatie: http://tweakers.net/ext/f/fc14c62f69f2d29e2dbada3db6696735/thumb.png

[ Voor 36% gewijzigd door Snake op 27-10-2007 01:00 ]

Going for adventure, lots of sun and a convertible! | GMT-8


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:12

crisp

Devver

Pixelated

Gebruik geen array als hashmap maar een object. En dit is dan de juiste syntax:
JavaScript:
1
2
3
4
var plugins = {
    'acrobat': ie ? 'PDF.PdfCtrl.5' : 'application/pdf',
    'flash': ie ? 'ShockwaveFlash.ShockwaveFlash.1' : 'application/x-shockwave-flash'
}


Overigens is UA-sniffing hoogst onbetrouwbaar, dit is wel een mooie en betrouwbare manier om IE te detecteren:
JavaScript:
1
var ie = /*@cc_on!@*/false;

[ Voor 23% gewijzigd door crisp op 27-10-2007 09:17 ]

Intentionally left blank


Verwijderd

Topicstarter
@crisp - waarom werkt een object op deze manier wel en en array niet? Een array zo genoteerd werkte dan weer wel:
JavaScript:
1
2
3
var plugins = new Array();
plugins['acrobat']     = (ie) ? 'PDF.PdfCtrl.5' : 'application/pdf';
plugins['flash']       = (ie) ? 'ShockwaveFlash.ShockwaveFlash.1' : 'application/x-shockwave-flash';

Een hele originele manier om ie te detecteren trouwens. Dank je :) Ik heb altijd UA-sniffing gebruikt, omdat ik er vanuit ga dat echt niet zoveel mensen handmatig hun UA-string zullen veranderen...

Verwijderd

Topicstarter
In hetzelfde statistiekenscriptje probeer ik de eventuele zoektermen van de referrer uit te lezen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
detectSearch("http://www.google.com?q=dattum");

var sniffs = {
  '/google\./i' : 'q',
  '/yahoo\./i' : 'p'
}

function detectSearch(uri) {
  for (var sniff in sniffs) {
    if (uri.match(sniff)) {
      alert(getArg(uri, sniffs[sniff]));
    }
  }
}

function getArg(uri, arg) {
  var args = [];
  uri = uri.substr(uri.indexOf("?") + 1, uri.length);
  for (var i = 0; i < uri.split("&").length; i++) {
    if (uri.split("&")[i].split("=")[0] == arg) {
      return uri.split("&")[i].split("=")[1];
    }
  }
}

Maar ook hier gebeurt niets. Ik krijg geen error, maar wel een "searchterms undefined" boodschap. Wat doe ik nu weer verkeerd?

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Verwijderd schreef op zaterdag 27 oktober 2007 @ 14:09:
In hetzelfde statistiekenscriptje probeer ik de eventuele zoektermen van de referrer uit te lezen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
detectSearch("http://www.google.com?q=dattum");

var sniffs = {
  '/google\./i' : 'q',
  '/yahoo\./i' : 'p'
}

function detectSearch(uri) {
  for (var sniff in sniffs) {
    if (uri.match(sniff)) {
      alert(getArg(uri, sniffs[sniff]));
    }
  }
}

function getArg(uri, arg) {
  var args = [];
  uri = uri.substr(uri.indexOf("?") + 1, uri.length);
  for (var i = 0; i < uri.split("&").length; i++) {
    if (uri.split("&")[i].split("=")[0] == arg) {
      return uri.split("&")[i].split("=")[1];
    }
  }
}

Maar ook hier gebeurt niets. Ik krijg geen error, maar wel een "searchterms undefined" boodschap. Wat doe ik nu weer verkeerd?
Geen idee, ik zie geen searchterms variabele in jouw code snippet.

Fat Pizza's pizza, they are big and they are cheezy


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:12

crisp

Devver

Pixelated

Verwijderd schreef op zaterdag 27 oktober 2007 @ 12:53:
@crisp - waarom werkt een object op deze manier wel en en array niet? Een array zo genoteerd werkte dan weer wel:
JavaScript:
1
2
3
var plugins = new Array();
plugins['acrobat']     = (ie) ? 'PDF.PdfCtrl.5' : 'application/pdf';
plugins['flash']       = (ie) ? 'ShockwaveFlash.ShockwaveFlash.1' : 'application/x-shockwave-flash';
Omdat een array literal nu eenmaal deze syntax heeft:
JavaScript:
1
var array = [element0, element1, etc];

het is ook redelijk zinloos in javascript om voor associatieve keys een array te gebruiken; als je geen array-specifieke eigenschappen nodig hebt gebruik dan gewoon een object (een array is immers ook niet meer dan een object met wat specifieke eigenschappen en methods).
Daarbij wordt Array nog wel eens geprototyped wat weer problemen kan opleveren bij for-in constructs.
Een hele originele manier om ie te detecteren trouwens. Dank je :) Ik heb altijd UA-sniffing gebruikt, omdat ik er vanuit ga dat echt niet zoveel mensen handmatig hun UA-string zullen veranderen...
Aannames zijn de oorzaak van vele fuck-ups :P Opera heeft zich bijvoorbeeld heel lang standaard als IE geidentificeerd. Sowieso zal je moeten scannen op 'MSIE' en niet op 'msie' ;)
Verwijderd schreef op zaterdag 27 oktober 2007 @ 14:09:
In hetzelfde statistiekenscriptje probeer ik de eventuele zoektermen van de referrer uit te lezen:

[...]

Maar ook hier gebeurt niets. Ik krijg geen error, maar wel een "searchterms undefined" boodschap. Wat doe ik nu weer verkeerd?
Ik denk dat je hier keylabels op een hele verkeerde manier gebruikt. Verder is een string natuurlijk geen regexp instance. Persoonlijk zou ik dit op zo'n manier doen:
JavaScript:
1
2
3
4
var snifs = [
    { regexp: /google\./i, arg: 'q' },
    { regexp: /yahoo\./i, arg: 'p' }
];


verder is je getArg functie zachtsgezegd nogal inefficient ;)

Intentionally left blank

Pagina: 1