网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 IE6 IE7 IE8 会忽略 JavaScript 代码中大括号之后的第一个分号
内容
    标准参考
    根据 ECMAScript 规范 12.1 Block 中的描述,“{ [StatementList] }”即一组大括号之间包含有一组语句,这被称作一个“块”(block)。
    根据 ECMAScript 规范 12.3 Empty Statement 中的描述,单独一个分号“;”是一个“空语句”(EmptyStatement)。
    在 ECMAScript 规范的 12.5 The if Statement、12.6.1 The do-while Statement 和 12.14 The try Statement 中,分别描述了“if-else”、“do-while”、“try-catch”的语法,他们有一个共同点:都是一个整体的语句结构(statement)。
    也就是说,在“if”和“else”之间、“do”和“while”之间、“try”和“catch”之间是不允许有其他语句存在的,包括“空语句”。
    问题描述
    在 IE6 IE7 IE8 中,JavaScript 代码中语句块结束符号“}”之后的第一个分号“;”会被忽略。
    造成的影响
    若在如“if”和“else”这样的整体语句结构之间插入一个分号“;”(即在“if”块的结束大括号“}”之后插入一个分号“;”),则仅在 IE6 IE7 IE8 中可以正常运行,其他浏览器均会在预处理期出错而使所有代码无法进入解释期,导致页面中的所有 JavaScript 代码均不会正常执行。
    受影响的浏览器
    IE6 IE7 IE8
    问题分析
    运行下面三组测试代码:
    if(true){
    alert("IF");
    };
    else{
    alert("ELSE")
    }
    do{
    alert("DO");
    };
    while(false);
    try{
    aler("TRY");
    };
    catch(e){
    alert("CATCH");
    }
    上面三组测试代码中,“if-else”、“do-while”、“try-catch”均为一个整体语句结构,但他们都被一个空语句“;”给分隔开了。
    以上代码在各浏览器中的运行结果如下:
    IE6 IE7 IE8 Firefox Chrome Safari Opera
    弹出提示框:
    “IF” syntax error:
    else { Uncaught SyntaxError:
    Unexpected token else SyntaxError:
    Parse error Syntax error:
    expected expression,
    got keyword 'else'
    弹出提示框:
    “DO” missing while
    after do-loop body Uncaught SyntaxError:
    Unexpected token ; SyntaxError:
    Parse error Syntax error:
    syntax error
    弹出提示框:
    “TRY” missing catch or finally
    after try Uncaught SyntaxError:
    Missing catch or finally after try SyntaxError:
    Parse error Syntax error:
    missing catch or finally
    clause in try statement
    可见:IE6 IE7 IE8 忽略了这个多余的“;”,使代码能够正常解释,而非 IE 浏览器均按照规范对代码进行了解释,提示错误。
    进一步测试如下(简单起见,仅以“if-else”语句为例):
    if(true){
    alert("IF");
    };;
    else{
    alert("ELSE")
    }
    这时在所有浏览器中均会出现“语法错误”。
    可见,IE6 IE7 IE8 仅可以忽略“}”后的第一个“;”,若“;”多于一个则在构造语法树时也会发生语法错误。1
    注:
    1.不说 IE6 IE7 IE8 允许在“;”的位置允许出现空语句,是因为一个空语句和两个空语句都会破坏代码结构,从测试结果看,IE6 IE7 IE8 是单纯的忽略了第一个“;”而已。
    解决方案
    按照规范书写正确的代码。
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/16 7:53:56