IE6 IE7 IE8 会忽略 JavaScript 代码中大括号之后的第一个分号
来源: 阅读:1728 次 日期:2015-04-22 10:37:17
温馨提示: 小编为您整理了“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 是单纯的忽略了第一个“;”而已。

解决方案

按照规范书写正确的代码。

更多信息请查看IT技术专栏

更多信息请查看 脚本栏目
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们| 联系我们| 人才招聘| 网站声明| 网站帮助| 非正式的简要咨询| 简要咨询须知| 加入群交流| 手机站点| 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00) 版权所有:
云南网警报警专用图标
Baidu
map