javascript学习指南|javascript入门篇:变量和try catch()

更新时间:2017-07-30    来源:php入门    手机版     字体:

【www.bbyears.com--php入门】

E中有一个鲜为人知的功能,称之为条件编译(conditional compilation)。自IE4开始支持条件编译至今,此功能逐渐得到更多人的关注,并运用在自己的JavaScript代码中,甚至在一些Ajax代码中也会经常发现它的身影。条件编译允许由你控制IE浏览器是否执行你自定义的脚本部分,而对其它浏览器没有影响,其它浏览器只会将这些自定义脚本视为普通的脚本注释。

语法概述
启用条件编译的关键词为 /*@cc_on ,结束为 @*/ 。还可以使用逻辑语句如 @if 或 @set 。下面是一个简单的例子:

<script type="text/javascript">
/*@cc_on alert("JScript版本: " + @_jscript_version);
/*@if (@_jscript_version >= 5) alert("这句话只有JScript版本为 5.0 或更高的浏览器才能看到"); @else @*/
alert("这句话能被其它浏览器看到(Firefox, Opera, IE 4.x etc)"); /*@end @*/ </script>


如果你使用IE浏览器(任何版本),你会看到第一个alert内容为“JScript版本:XX”
如果你使用IE5及以上的浏览器访问,那么会看到第二个alert内容为“JScript版本为 5.0 或更高”。
如果你使用其它浏览器,如火狐,Opera,chrome,则只会看到第三个alert。
使用条件语句:@if, @elif, @else, @end
在条件编译内附加声明条件的语句:

@if
@elif 相当于其它语法中的elseif
@else
@end
让我们看几个“古怪”的例子:

if else 的逻辑 Ⅰ (仅用于IE)
/*@cc_on @if (@_win32) alert("操作系统是 32位. 浏览器是 IE."); @else alert("操作系统不是 32位. 浏览器是 IE."); @end @*/


判断操作系统是否为32位,且整个脚本只在IE下执行,而忽略所有其它浏览器。接下来,让我们仔细对比一下上面的例子与下面这个例子的差异:

if else 的逻辑 Ⅱ (同时适用其它浏览器)
/*@cc_on @if (@_win32) alert("操作系统是 32位. 浏览器是 IE."); @else @*/ alert("浏览器不是 IE 或 操作系统不是32位"); /*@end @*/


通过操纵注释标记的位置,让上面这个例子支持判断非IE浏览器。第二个alert会被所有不是32位系统或是非IE浏览器执行。只有研究到头都大了,你才会发现注释逻辑的奥妙 : )

if,elseif,else 的逻辑 Ⅰ (仅用于IE)
/*@cc_on @if (@_jscript_version >= 5) alert("当前IE浏览器支持JScript 5+"); @elif (@_jscript_version >= 4) alert("当前IE浏览器支持JScript 4+"); @else alert("你的IE是文物吗?"); @end @*/


if,elseif,else 的逻辑 Ⅱ (同时适用其它浏览器)
/*@cc_on /*@if (@_jscript_version >= 5) alert("当前IE浏览器支持JScript 5+"); @elif (@_jscript_version >= 4) alert("当前IE浏览器支持4+"); @else @*/ alert("非IE浏览器(一个不支持JScript的浏览器)"); /*@end @*/


在最后一个例子中,注意最后一个else的写法,这似的非IE浏览器也参与到判断中来。


js变量


语法概述
启用条件编译的关键词为 /*@cc_on ,结束为 @*/ 。还可以使用逻辑语句如 @if 或 @set 。下面是一个简单的例子:

<script type="text/javascript"> /*@cc_on alert("JScript版本: " + @_jscript_version); /*@if (@_jscript_version >= 5) alert("这句话只有JScript版本为 5.0 或更高的浏览器才能看到"); @else @*/ alert("这句话能被其它浏览器看到(Firefox, Opera, IE 4.x etc)"); /*@end @*/ </script>


如果你使用IE浏览器(任何版本),你会看到第一个alert内容为“JScript版本:XX”
如果你使用IE5及以上的浏览器访问,那么会看到第二个alert内容为“JScript版本为 5.0 或更高”。
如果你使用其它浏览器,如火狐,Opera,chrome,则只会看到第三个alert。
使用条件语句:@if, @elif, @else, @end
在条件编译内附加声明条件的语句:

@if
@elif 相当于其它语法中的elseif
@else
@end
让我们看几个“古怪”的例子:

if else 的逻辑 Ⅰ (仅用于IE)
/*@cc_on @if (@_win32) alert("操作系统是 32位. 浏览器是 IE."); @else alert("操作系统不是 32位. 浏览器是 IE."); @end @*/


判断操作系统是否为32位,且整个脚本只在IE下执行,而忽略所有其它浏览器。接下来,让我们仔细对比一下上面的例子与下面这个例子的差异:

if else 的逻辑 Ⅱ (同时适用其它浏览器)
/*@cc_on @if (@_win32) alert("操作系统是 32位. 浏览器是 IE."); @else @*/ alert("浏览器不是 IE 或 操作系统不是32位"); /*@end @*/


通过操纵注释标记的位置,让上面这个例子支持判断非IE浏览器。第二个alert会被所有不是32位系统或是非IE浏览器执行。只有研究到头都大了,你才会发现注释逻辑的奥妙 : )

if,elseif,else 的逻辑 Ⅰ (仅用于IE)
/*@cc_on @if (@_jscript_version >= 5) alert("当前IE浏览器支持JScript 5+"); @elif (@_jscript_version >= 4) alert("当前IE浏览器支持JScript 4+"); @else alert("你的IE是文物吗?"); @end @*/


if,elseif,else 的逻辑 Ⅱ (同时适用其它浏览器)
/*@cc_on /*@if (@_jscript_version >= 5) alert("当前IE浏览器支持JScript 5+"); @elif (@_jscript_version >= 4) alert("当前IE浏览器支持4+"); @else @*/ alert("非IE浏览器(一个不支持JScript的浏览器)"); /*@end @*/


在最后一个例子中,注意最后一个else的写法,这似的非IE浏览器也参与到判断中来。


try catch()


在第一节的开始,我就曾经提起过条件编译被越来越多的用在Ajax中。现在我就要解释为什么会这样。不同浏览器提供的异步请求的对象不同,导致了一个完善的Ajax程序必须在核心函数中先判断当前浏览器的种类及版本。

一段典型的Ajax代码实例可以帮你了解这些:

function HttpRequest(url, parameters){
var pageRequest = false //定义获得Ajax对象的变量,并赋初始值(好习惯) if (window.XMLHttpRequest) // mozilla系如火狐,webkit系如Safari和chrome,还有Opera支持这个对象
pageRequest = new XMLHttpRequest() else if (window.ActiveXObject){ // 只有IE支持,而且不只一种 try { pageRequest = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ try{ pageRequest = new ActiveXObject("Microsoft.XMLHTTP") } catch (e){} } } else return false }
大多数人都认为上面这段脚本在IE下能成功执行。但很遗憾,事实并非如此。某些浏览器不支持"throw/catch"的浏览器,如万恶的IE系列的小四(IE 4.x)。这些不支持抛出获取的浏览器将会在抛出前中断并返回一个错误。为了解决这个缺陷,我们用条件编译将上述代码重写成一个真正实现合理跨浏览器运行的Ajax函数:

真正实现合理跨浏览器运行的Ajax函数

function HttpRequest(url, parameters){
var pageRequest = false //定义获得Ajax对象的变量,并赋初始值(好习惯)
/*@cc_on @if (@_jscript_version >= 5)
try { pageRequest = new ActiveXObject("Msxml2.XMLHTTP") }
catch (e){
try {
pageRequest = new ActiveXObject("Microsoft.XMLHTTP") }
catch (e2){
pageRequest = false }
} @end @*/
if (!pageRequest && typeof XMLHttpRequest != "undefined") pageRequest = new XMLHttpRequest() }
因为只需针对IE5及以上的浏览器使用try/catch那部分判断,所以用条件编译将之与正常的判断区分开。而实际情况是很少会遇到IE4或其它类似的浏览器。火狐及其它支持标准的浏览器很显然会使用XMLHttpRequest。于是,你得到了一个真正实现合理跨浏览器运行的Ajax函数!

本文来源:http://www.bbyears.com/jiaocheng/34481.html