If and else are not two statements. It's two different forms of the
if-statement.

The if statement is a compound statement, meaning that it can contain other
statements as parts of itself. Those statements are either just the
mandatory then-branch, or the then-branch and an else-branch. The
if-statement still counts as one statement itself.

The code:
  if (some_condition)
   some_function();
  else
   some_other_function();
is an example of this. It has two branches, each being exactly one statement
(in this case ExpressionStatements, which are an Expression followed by a
semicolon). The presence of the else-branch is marked by the first statement
being *immediately* followed by the keyword "else" and then the else-branch
statement.

A block statement is another compound statement. It can contain an arbitrary
number of other statements. So,
  if (condition)
    { x = 2; y = 4; }
  else
    some_function();
is also valid. The then-branch is a single statement, which is a statement
block containing two other statements. It's traditionally written
 if (condition) {
   x = 2;
   y = 4;
 } else {
   some_function();
 }
but the "{"'s are not part of the if-statment syntax, but part of the
block-statement syntax.

With that in mind, you have code on the form:
  if (c1) if (c2) s1 else s2

In this case, the "else" binds to the closest if, so it's equivalent to:
  if (c1) { if (c2) s1 else s2 }
and not
  if (c1) { if (c2) s1 } else s2
which is why you get "a is not o".

The syntax for if-statements comes from the C language (or possibly from the
precursor B). It's not specific to JavaScript.

Best of luck
/Lasse

On Fri, Jan 28, 2011 at 13:39, PhistucK <[email protected]> wrote:

> I added HTML code because the syntax error does not occur on Internet
> Explorer 8 (for example) and it is easier to test when you have the entire
> code ready.
>
> So you are basically saying that "if" and "else" do not count as two
> statements, right?
>
> I guess I am confused, because I recently found out you can actually run
> this code without any error -
> if (some_condition)
>  some_function();
> else
>  some_other_function();
>
> ☆*PhistucK*
>
>
>
> 2011/1/28 Mikael Helbo Kjær <[email protected]>
>
> Hi there.
>>
>>
>>
>> This is not the usual thing to ask here (I’d go for some sort of
>> Javascript forum in the future).
>>
>>
>>
>> I think you don’t need to include any sort of HTML here to get ppl to look
>> at your JS.
>>
>>
>>
>> First problem:
>>
>> You have a ; after the end of your if block (I’ve marked it below), that
>> ends the if else statement too early. Else cannot stand alone so to speak.
>>
>>
>>
>> Second problem: your blocks are not entirely right here. The parser can
>> only follow the rules here. The if sentence either deals with the next
>> statement (line) or block. Only if that line or block is directly followed
>> by an else or else if can that be included. A corrected (untested assumption
>> here) example could be (there is more than one way to do it):
>>
>>
>>
>> var a = “0”
>>
>> var b = “c”
>>
>> if (a == “0”)
>>
>> {
>>
>>      if (b == “b”)
>>
>>     {
>>
>>         alert(“a is o”);
>>
>>         alert(“b is b”);
>>
>>     }
>>
>> }
>>
>> else
>>
>> {
>>
>>     alert(“a is not o”);
>>
>> }
>>
>>
>>
>> /Mikael
>>
>>
>>
>> When I try this code -
>>
>> <!DOCTYPE HTML>
>>
>> <html>
>>
>> <script>
>>
>> var a = "o";
>>
>> var b = "c";
>>
>> if (a == "o")
>>
>>  if (b == "b")
>>
>>  {
>>
>>   alert("a is o");
>>
>>   alert("b is b");
>>
>>  }; ß Problem here
>>
>> else
>>
>> {
>>
>>  alert("a is not o");
>>
>> };
>>
>> </script>
>>
>> </html>
>>
>>
>>
>> It shows -
>>
>> Uncaught SyntaxError: Unexpected token else
>>
>>
>>
>> Should that error be triggered? can you explain why?
>>
>>
>>
>>
>>
>>
>>
>> Also, running it without that semicolon -
>>
>> <!DOCTYPE HTML>
>>
>> <html>
>>
>> <script>
>>
>> var a = "o";
>>
>> var b = "c";
>>
>> if (a == "o")
>>
>>  if (b == "b")
>>
>>  {
>>
>>   alert("a is o");
>>
>>   alert("b is b");
>>
>>  }
>>
>> else
>>
>> {
>>
>>  alert("a is not o");
>>
>> };
>>
>> </script>
>>
>> </html>
>>
>>
>>
>> Shows an alert - "a is not o".
>>
>> As far as I know, "if" and "else" count as two statements. If they are,
>> the "else" block is actually part of the first "if" statement.
>>
>> Am I misinformed, or is it a bug?
>>
>>
>>
>> --
>> v8-users mailing list
>> [email protected]
>> http://groups.google.com/group/v8-users
>>
>
>  --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
>



-- 
Lasse R.H. Nielsen
[email protected]
'Faith without judgement merely degrades the spirit divine'
Google Denmark ApS - Frederiksborggade 20B, 1 sal - 1360 København K -
Denmark - CVR nr. 28 86 69 84

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to