Ich versuche, das folgende if-else wie folgt in die ternäre Operatordarstellung in Javascript umzuwandeln

var x = 2;
if (x === 2) {alert("2");}
else
         { //do nothing}

Aber wenn ich das mache:

(t==2)?(alert("1")):();

Chrome löst einen SyntaxError aus.

Meine Frage ist - wie man einen ternären Operator in Javascript mit einem leeren "else" -Zweig hat - d. H. Den Teil, der nach ":" kommt. Ist dies auch zulässig? Verwenden Sie einen ternären Operator in Javascript, um Anweisungen auszuführen. Führen Sie KEINE Zuweisungen durch.

Außerdem: Der obige Code war nur ein Basisfall. Ich versuche tatsächlich, alle DOM-Elemente der Seite als Array (mit dem Namen all2) abzurufen und dann nur diese Elemente einem anderen Array (nur mit dem Namen aufgerufen) hinzuzufügen, wenn sie Klassennamen ungleich Null haben. Hier ist mein Code:

all2.forEach(function(e){ e.getAttribute("class") ? (only.push(e.getAttribute("class"))) : (); }); 

Wenn ich den dritten Operanden leer lasse, wird ein Syntaxfehler ausgegeben. Das Übergeben einer Null funktioniert

2
Probosckie 12 Aug. 2015 im 12:04

6 Antworten

Beste Antwort

Antwort auf Ihre eigentliche Frage in den Kommentaren:

all2.forEach(function (e) {
    e.getAttribute("class") && only.push(e.getAttribute("class"));
});
10
Nina Scholz 12 Aug. 2015 im 09:18

Sie haben viele nutzlose Klammern gesetzt, und der beste NULL-Wert in js ist undefined.

document.getElementById('btn-ok').onclick = function(){
  var val = document.getElementById('txt-val').value;
  
  val == 2 ? alert(val) : undefined;
}
<input id="txt-val" type="number" />
<button type="button" id="btn-ok">Ok</button>

Die Verwendung einer einzeiligen if Anweisung ist jedoch besser

if(value === 2) alert(value);
3
fra9001 12 Aug. 2015 im 09:17

In diesem Fall müssen Sie den ternären Operator nicht verwenden. Der ternäre Operator erfordert ein drittes Argument.

Bedingung ? Ausdruck1: Ausdruck2

Lokki unter Bedingter (ternärer) Operator

Sie können die if-Anweisung

if ( t == 2 ) alert(1);
2
Milos Miskone Sretin 12 Aug. 2015 im 09:12

Sie haben ein paar Möglichkeiten, dies in einer Zeile zu tun:

Option1 - Noop-Funktion

Stellen Sie eine globale Noop-Funktion ein:

function noop(){}
(t==2)?(alert("1")):(noop());

Option2 - && Operator

Wenn Sie den Operator && verwenden, werden Operanden nur ausgewertet, wenn die vorherigen wahr sind, sodass Sie Folgendes schreiben können:

(t==2) && alert("1");

Wenn Sie beispielsweise ein Array haben, auf das Sie pushen möchten, können Sie testen, ob es vorher nicht null ist:

arr && arr.push(obj)
2
MoLow 12 Aug. 2015 im 09:14

NEIN, Sie können kein leeres anderes haben, verwenden Sie besser nicht den ternären Operator, es erfordert ein drittes Argument. Gehen Sie mit einfachen wenn Bedingung.

if(t==2) alert("2");
2
venkat7668 12 Aug. 2015 im 09:13

Mach das :

(t==2)?(alert("1")):null;

Sie können null durch einen Ausdruck ersetzen, der keine Nebenwirkungen hat. () ist kein gültiger Ausdruck.

3
Pratik 12 Aug. 2015 im 09:15