2017-07-12 29 views
9

Próbowałem dwa następujące oświadczenia:Okrągły nawiasy "()" stworzyć różnicę

  1. oświadczenie pracuje bez zarzutu, a jego wynik powrocie

    console.log((window.custom || (window.custom = "New window"))); 
     
    
     
    

  2. instrukcja właśnie usunięta() i wyświetlana po błędzie

    Uncaught Reference Error: Invalid left-hand side in assignment

    console.log((window.custom || window.custom = "New window" )); 
     
    
     
    

Co złego 2. stwierdzeniem?

Odpowiedz

19

|| ma wyższy priorytet niż =, więc druga jest analizowany jako:

console.log((window.custom || window.custom) = "New Window"); 

nie można przypisać do wyniku ekspresji ||.

To pierwszeństwo dlatego można pisać takie rzeczy jak:

somevar = window.custom || "Default value"; 
+2

So() ma wyższy priorytet niż || , że powód pierwszego oświadczenia działa? –

+5

Nawiasy mają najwyższy priorytet, ponieważ są używane do wymuszenia dowolnej określonej grupy. – Barmar