2012-03-26 15 views
0

Diese Funktion erstellt & speichert einen Cookie, und hier speichert es den Namen des Besuchers in einer Cookie-Variable. Nach dem sourceWas passiert in diesem ternären JavaScript-Operator?

Die Parameter der Funktion den Namen des Cookies halten, die Wert des Cookies, und die Anzahl der Tage, bis das Cookie abläuft.

In der Funktion konvertieren wir zuerst die Anzahl der Tage in ein gültiges Datum, dann fügen wir die Anzahl der Tage hinzu, bis der Cookie abläuft. Danach speichern wir den Cookie-Namen, den Cookie-Wert und das Ablaufdatum im document.cookie-Objekt.

function setCookie(c_name,value,exdays) 
{ 
    var exdate=new Date(); 
    exdate.setDate(exdate.getDate() + exdays); 
    var c_value=escape(value) + 
       ((exdays==null) ? "" : ";expires="+exdate.toUTCString()); 
    document.cookie=c_name + "=" + c_value; 
} 

kann ich sehen, wie das Datum funktioniert, aber was in diesem Teil geschieht:

var c_value=escape(value) + ((exdays==null) ? "" : "; 

Hier ist der auslösende Code:

function checkCookie() 
{ 
var username=getCookie("username"); 
if (username!=null && username!="") 
    { 
    alert("Welcome again " + username); 
    } 
else 
    { 
    username=prompt("Please enter your name:",""); 
    if (username!=null && username!="") 
    { 
    setCookie("username",username,365); 
    } 
    } 
} 

schätze ich irgendwelche Tipps oder Rat.

+1

Das ist ein ternärer Operator: '(Test)? wahrer Teil: falscher Teil'. Wenn "test" wahr ergibt, gibt der Ausdruck den "wahren Teil" zurück, andernfalls den "falschen Teil". –

+0

Welche Argumente werden normalerweise übergeben?Können Sie uns den aufrufenden Code zeigen? –

+1

@Cory die Zeile ist eingewickelt - es ist gut und gültig – ManseUK

Antwort

4

Die Zeile umgebrochen wird, ist hier die volle Linie:

var c_value=escape(value) + ((exdays==null) ? "" : ";expires="+exdate.toUTCString()); 

dies bedeutet, wenn die exdays Parameter nicht specifed wurden (exdays==null) dann leer hinzufügen ("") sonst ";expires=" hinzufügen sowie das Datum (exdate) als Eine Zeichenfolge mit toUTCString()

Um mehr über Cookies use Mozilla MDN anstelle von w3schools zu lernen. Diese Art von if Aussage ist ein conditional operator

+0

Oh! Zeilenumbruch! Das war knifflig, Vielen Dank Manse! – Coffee

1

Der falsche Teil des ternären hat einen Zeilenumbruch in ihm ganz am Ende. Ich denke, es sollte sein:

var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); 

statt:

var c_value=escape(value) + ((exdays==null) ? "" : "; 
    expires="+exdate.toUTCString()); 
1

Es scheint ein schlechter Zeilenumbruch in geposteten Code.

var c_value=escape(value) + ((exdays==null) ? "" : "; 
    expires="+exdate.toUTCString()); // this line should be up after the semicolon 

Dies würde dann Ausbeute:

var c_value=escape(value) + ((exdays==null) ? "" : ";expires="+exdate.toUTCString()); 

Was bedeutet, dass grundsätzlich exdays an die Funktion gegeben, wenn sich null (double equals so ist es dazu gezwungen wird, die nicht definiert, leere Zeichenfolge bedeutet, oder ganze Zahl 0 würde auch scheitern), dann würde die Ablaufzeichenfolge nicht verkettet werden. Wenn ein Ablaufdatum angegeben wurde, wird ";expires="+exdate.toUTCString() an die Cookie-Zeichenfolge angehängt.

+0

Vielen Dank Babey! Auch für das Doppel ist die Info gleich! – Coffee

2

Sollte es so etwas sein?

var c_value=escape(value) + (exdays==null) ? "True Part" : "False Part"; 
+0

Zu schnelle Antworten innerhalb nur diese zwei Zeilen eingeben und die Antwort einreichen ... Wie auch immer, ich hoffe, Sie haben die Lösung gefunden :) –

Verwandte Themen