[Javascript] Na console.log wordt output nog weergegeven?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Hatsieflatsie
  • Registratie: Oktober 2011
  • Laatst online: 29-05 15:45
Ik heb de volgende for loop:

JavaScript:
1
2
3
4
for(i=0; i <= 3; i++){
  console.log("Hallo wereld");
  "Dit is een test";
 }


Mij valt op dat naast de eerste string "Hallo wereld" ook de tweede string "Dit is een test" weergegeven wordt. Dit bevreemdt mij, de tweede string bevindt immers niet in de parameters van functie console.log. Tevens heb ik de console.log afgesloten met semicolon, dan zou de browser niet verder moeten kijken.

Waarom wordt de tweede string dan toch weergegeven :?

Acties:
  • 0 Henk 'm!

  • hiekikowan
  • Registratie: Februari 2011
  • Laatst online: 15:20
Deze situatie doet zich voor wanneer er geen andere mogelijkheid is om naar te schrijven, een soort standaard output-lokatie. De console is hier dan het meest voor de hand liggend...

Wat wil je met de tweede regel bereiken?

Acties:
  • 0 Henk 'm!

  • Hatsieflatsie
  • Registratie: Oktober 2011
  • Laatst online: 29-05 15:45
De Hallo Wereld string in console laten weergeven.

Ik vind het vreemd dat de "Dit is een test" ook in de console weergegeven wordt, terwijl het niet zou moeten.

Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 15:04
Maar wat wil je bereiken dan met "Dit is een test";? Wat verwacht je dat dat doet, of was is het probleem?

Acties:
  • 0 Henk 'm!

  • Hatsieflatsie
  • Registratie: Oktober 2011
  • Laatst online: 29-05 15:45
Ik vind het alleen ongebruikelijk, en ik vraag mij af of dit het hoort.

Zo heb je bijvoorbeeld in een ander taal:
PHP:
1
2
3
4
<?php
echo "Dit zinnetje wordt wél weergegeven";
"Dit wordt niet weergegeven, omdat er niet aangegeven wordt dat hij geëchoed moet worden";
?>


Als het in Javascript kennelijk wel zo hoort, wat is het nut van de hele console.log dan nog?

[ Voor 10% gewijzigd door Hatsieflatsie op 27-10-2013 21:56 ]


Acties:
  • 0 Henk 'm!

  • Amanush
  • Registratie: Mei 2012
  • Laatst online: 04-05 19:11

Amanush

Saai persoon.

Als je console.log() gebruikt volg je de officiele standaarden. Dat betekent dat het op alle (moderne) "Rendering Engines"/Browsers goed werkt!

Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.


Acties:
  • 0 Henk 'm!

  • Sleepkever
  • Registratie: Juni 2007
  • Laatst online: 16:55
Hatsieflatsie schreef op zondag 27 oktober 2013 @ 21:55:
Ik vind het alleen ongebruikelijk, en ik vraag mij af of dit het hoort.

Zo heb je bijvoorbeeld in een ander taal:
PHP:
1
2
3
4
<?php
echo "Dit zinnetje wordt wél weergegeven";
"Dit wordt niet weergegeven, omdat er niet aangegeven wordt dat hij geëchoed moet worden";
?>


Als het in Javascript kennelijk wel zo hoort, wat is het nut van de hele console.log dan nog?
console.log() hoort ook niet. Dat staat namelijk nergens in een standaard en is zelf toegevoegd door sommige browser makers.

Dat javascript nou zo vergevend is en dat naar console logt zodat je het toch nog ergens terug vind is gewoon niet bescheven gedrag waar je niet op moet rekenen. Als je consistent gedrag wilt moet je maar eens gaan kijken naar "use strict" dan krijg je teminste nog een beetje foutmeldingen.
Amanush schreef op zondag 27 oktober 2013 @ 22:02:
Als je console.log() gebruikt volg je de officiele standaarden. Dat betekent dat het op alle (moderne) "Rendering Engines"/Browsers goed werkt!
Nope, sterker nog, er waren vroeger problemen dat het in IE9 gewoon weigerde te werken tot je de developer console open had. Je kan er dus niet eens op vertrouwen dat console.log bestaat, laat staan dat console.log altijd doorloopt op alle browsers die op dit moment nog in gebruik zijn. Controleer dus even of de functie uberhaupt beschikbaar is voor je hem gebruikt, anders krijg je crashes die weg gaan zodra je je debug console open trekt bijvoorbeeld :P Dat kan je een hoop hoofdpijn besparen.

[ Voor 29% gewijzigd door Sleepkever op 27-10-2013 22:04 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
"Doctor, when I push here it hurts!"
"Then don't do that."

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Amanush
  • Registratie: Mei 2012
  • Laatst online: 04-05 19:11

Amanush

Saai persoon.

Sleepkever schreef op zondag 27 oktober 2013 @ 22:02:
[...]

console.log() hoort ook niet. Dat staat namelijk nergens in een standaard en is zelf toegevoegd door sommige browser makers.

Dat javascript nou zo vergevend is en dat naar console logt zodat je het toch nog ergens terug vind is gewoon niet bescheven gedrag waar je niet op moet rekenen. Als je consistent gedrag wilt moet je maar eens gaan kijken naar "use strict" dan krijg je teminste nog een beetje foutmeldingen.
Doorgaands maakt. W3C en/of de browsermakers dan ook de standaarden. console.log() is de meest gebruikelijke standaard om dit doel te bereiken.

Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.


Acties:
  • 0 Henk 'm!

  • Sleepkever
  • Registratie: Juni 2007
  • Laatst online: 16:55
Amanush schreef op zondag 27 oktober 2013 @ 22:04:
[...]


Doorgaands maakt. W3C en/of de browsermakers dan ook de standaarden. console.log() is de meest gebruikelijke standaard om dit doel te bereiken.
Nee, tuurlijk, het zal vast wel zeer binnenkort in een standaard opgenomen worden. Het is gewoon ideaal. Maar om nu al te roepen dat alle browsers hem ondersteunen en dat het een standaard is? Nee. Gewoon controleren of beschikbaar voor gebruik, want als je dat niet doet stopt het gewoon op browsers waar het niet bestaat.

Acties:
  • 0 Henk 'm!

  • Amanush
  • Registratie: Mei 2012
  • Laatst online: 04-05 19:11

Amanush

Saai persoon.

Klopt, maar als je wilt loggen wil je wel console.log() gebruiken. Dit object/function neigt het meest naar de (toekomstige) standaard toe en werkt gewoon het best om mee te loggen.
Checken of het 'available' is is wel een goed idee, inderdaad, volgens mij kan dit via een statement: console.log == null

Dus: if(console.log == null){}

Is dit false, bestaat ie, is het true, bestaat console.log() dus niet!

Hoewel je deze ook op een andere manier kan verwerken in Javascript door gewoon console.log te gebruiken:

if(console.log){}

[ Voor 17% gewijzigd door Amanush op 27-10-2013 22:14 ]

Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-06 19:14
Met bovenstaande techniek van Amanush ga je de mist in in Internet Explorer; die gaat "variable 'console' is not defined" o.i.d. als error terug geven wanneer de developer tools niet eerder open geweest zijn.

Je wilt eerst aanwezigheid van window.console zelf testen en de enige manier om dat te doen zonder in bovenstaande val te trappen is om gebruik te maken van het 'in' keyword:

JavaScript:
1
2
3
if ( "console" in window && window.console.log ) {
  console.log( "hello world" );
}


Er zijn verder ook nog een paar issues met IE en het gebruik van call of apply op methods van het console object. (Het zijn namelijk host object functies en niet native JavaScript functies, waardoor ze call en apply niet gedefinieerd hebben...)

Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 15:04
Overigens, als ik de code run in jsFiddle krijg ik alleen 4x Hallo wereld, zowel in Chrome en IE10: http://jsfiddle.net/LFwUm/

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 17:33
Ik zie die tweede zin ook niet. Chrome en Firefox

Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 13:06
Dat je naar console.log() logberichten stuurt in JS in niet zo vreemd.
'Vroeger' injecteerde debuggers dit namelijk om deze logging op te vangen en weer te geven.
Maar strict genomen bestaat deze functie niet.
Wat je dus in productie doet, is een loze functie definieren die niets doet, zodat je clients geen foutmeldingen hierover krijgt:
JavaScript:
1
console.log = console.log || function (){};


Dan bestaat de functie wel, maar doet niets en hoef je je code ook niet aan te passen.

let the past be the past.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

rutgerw schreef op maandag 28 oktober 2013 @ 10:51:
Ik zie die tweede zin ook niet. Chrome en Firefox
Dat had ik ook wel verwacht. Dit lijkt me nou typisch iets wat een bepaalde browser uit zichzelf doet en in geen enkele standaard staat.

Ik kan er niet veel meer over zeggen dan "niet doen" verder. Begrijp ook niet hoe je hier überhaupt bij uitkomt...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 31-05 09:09
Ik heb onderstaand stukske code van stackoverflow geplukt, die het vervolgens zelf weer van de twitter broncode heeft gehaald (bron). Dit is een robuuste oplossing die niet alleen console.log maar elk 'console' statement vervangt / herimplementeert met een no-op indien hij niet bestaat. Voor IE, maar ook (oudere versies van) HTMLUnit of andere headless browsers die het hele 'console' object niet eens definieren:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Avoid `console` errors in browsers that lack a console.
(function() {
    var method;
    var noop = function () {};
    var methods = [
        'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
        'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
        'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
        'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];

        // Only stub undefined methods.
        if (!console[method]) {
            console[method] = noop;
        }
    }
}());

Acties:
  • 0 Henk 'm!

  • Zyppora
  • Registratie: December 2005
  • Laatst online: 25-04 16:24

Zyppora

155/50 Warlock

Of ik begrijp hem verkeerd, of de discussie is een beetje aan het afdwalen. Volgens mij was de vraag niet, 'wat doet console.log()', maar 'waarom wordt die tweede regel uitgeprint terwijl daar niet (expliciet) opdracht voor wordt gegeven'.

Je kunt m.i. de code van OP als volgt herschrijven:
JavaScript:
1
2
3
4
for(i=0; i <= 3; i++){
  console.log("Hallo wereld");
  new String("Dit is een test");
 }


Dan verwacht je toch ook niet dattie uitgeprint wordt? Tenzij console.log() iets magisch doet waardoor de engine in een soort van debug/tracing mode springt, maar dat lijkt me vergezocht.

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 15:04
Maar dat doet hij toch ook niet? Iig niet in mijn testcase (http://jsfiddle.net/LFwUm/)
Dus ik weet ook niet in welke browser hij dit getest heeft.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Dat zeg ik dus hierboven inderdaad: klinkt als een quirk van een random browser. En zelfs als wél elke browser het doet zou je er nog niet vanuit moeten gaan dát hij het doet omdat het niet in de specs staat. Bovendien betekent een regel code waarop je alleen een string neerzet niks en doe je dat in de praktijk dus toch niet. Het is gewoon een non-issue waar je gewoon nooit tegenaan loopt en als je het wel doet is er iets mis met je code...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Veel geblaat, maar de enige nuttige reactie was dus van begin af aan: "In welke browser zie je dit?".

{signature}


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-06 19:14
Barryvdh schreef op dinsdag 29 oktober 2013 @ 16:37:
Maar dat doet hij toch ook niet? Iig niet in mijn testcase (http://jsfiddle.net/LFwUm/)
Dus ik weet ook niet in welke browser hij dit getest heeft.
Dit reproduceert als je de code uitvoert via de console van Firebug. Als het laatste statement wat Firebug tegenkomt een geschikte right-hand value is, en daaronder vallen ook statement expressions zoals een vrijstaande string literal, dan wordt de waarde daarvan als 'uitvoer' op de console gemeld.
Zyppora schreef op dinsdag 29 oktober 2013 @ 16:21:
Je kunt m.i. de code van OP als volgt herschrijven:
JavaScript:
1
2
3
4
for(i=0; i <= 3; i++){
  console.log("Hallo wereld");
  new String("Dit is een test");
 }
Uhm.. Nee. Dat betekent iets wezenlijks anders en als je dat niet weet mag je even terug naar de basis en opnieuw JavaScript's type system door gaan nemen.

Acties:
  • 0 Henk 'm!

  • Zyppora
  • Registratie: December 2005
  • Laatst online: 25-04 16:24

Zyppora

155/50 Warlock

R4gnax schreef op dinsdag 29 oktober 2013 @ 23:38:
[...]


Uhm.. Nee. Dat betekent iets wezenlijks anders en als je dat niet weet mag je even terug naar de basis en opnieuw JavaScript's type system door gaan nemen.
Ik zal niet pretenderen intiem bekend te zijn met de inner workings van Javascript mbt. strings, maar een simpele google search geeft mij toch de indruk dat "string" en new String("string") synoniemen zijn.

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-06 19:14
Zyppora schreef op woensdag 30 oktober 2013 @ 08:36:
[...]


Ik zal niet pretenderen intiem bekend te zijn met de inner workings van Javascript mbt. strings, maar een simpele google search geeft mij toch de indruk dat "string" en new String("string") synoniemen zijn.
JavaScript:
1
2
3
4
typeof "foo" // "string"
typeof new String("foo") // "object"

"foo" === new String("foo") // false


Als je de volgende keer gaat googlen, negeer dan alsjeblieft de prut van w3schools. Die site is 110% waardeloos.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
R4gnax schreef op woensdag 30 oktober 2013 @ 09:41:
Als je de volgende keer gaat googlen, negeer dan alsjeblieft de prut van w3schools. Die site is 110% waardeloos.
QFT. Vroegah, toen google nog blacklisting aanbood stond die site als enige in mn blacklist.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1