[从jQuery看JavaScript]-注释(comments)

jQuery片段:

 

  查看任何源码时,我们通常都会看到开篇的地方会有一段解说,说明该段或者该文件中的源代码到底干了什么事情,并且在代码的字里行间,我们也可以看到这些说明穿插其中。而为了让这些说明能自由地穿插,JavaScript(以后的章节如没有特别说明,提及JavaScript的地方都是范指所有浏览器支持的JS,而不是特指Netscape的原版),提供了注释的机制。这种机制和其他高级语言基本上是一致的。例如标准的注释如下:

  • 单行注释
  • 多行注释

  看到以上的例子,可能你觉得这些都是很浅白的问题,然而,就是这么浅白的东西也可能会难倒人的。我曾经在CSDN上遇到一个问题,就是因为注释的字符编码引起的。详细的问题可以查看以下链接:http://topic.csdn.net/u/20090616/19/5ff988e4-e45e-445d-830a-a9d9f3ab606c.html。所以,如果某天你遇到某段自己编写的代码运行不了,但源代码怎么也查不出错误的时候,可以尝试一下先把所有注释去掉。(关于注释快速去除,可以选择使用网上流行的JS压缩工具,稍后我也将放出自己版本的压缩工具。)

 

  除此之外,Microsoft的IE还对此搞了点特殊化——条件注释(condition comments)。先看一下示例:

   因为这是IE专有的特性,对于现在程序员们追寻的整合型JS显得格格不入,但是其实这个属性却是值得利用的。就如上面的例子,利用条件注释和条件编译的IE特性,我们可以很容易把IE和其他浏览器区分开来,然后再针对其进行实现。但是,由于缺乏文档支持(或者只是我没找到),我们不清楚条件编译会不会对性能造成影响,所以一般不建议使用。(即使不编译,但是JS文件还是会整体读取的,我们应该尽量减少JS文件的大小来达到带宽性能的优化。)

 

  以下内容将是对条件注释和条件编译进行详细的解说,如果没有兴趣,可以跳过下一节。

 

条件注释与条件编译

 

  Microsoft设计条件编译的初衷是为了让新特性和旧版本兼容,并逐渐成为新的标准。可惜IE的垄断不成,而该特性也成为人们忽略掉的专用特性。一般来说,条件编译会与条件注释一起使用,以使不支持条件编译的浏览器不将其当作错误而停止编译运行。——这里需要注意的是,条件编译不等于条件注释,他们是不同的概念。条件编译的语法比较类似Basic(Microsoft离开不了的东西啊……)。

  • @cc_on 语句
    @cc_on是用来打开条件注释的语句,如果没有将条件注释打开,所有在注释中的条件编译语句都将被当成注释内容处理。
  • @if 语句
    @if与JS语法中的if基本一致。但分支语法有一点差别,具体语法如下:
    @if (
      condition1
    )
       text1

    [@elif (
      condition2

    )
       text2]
    [@else

       text3]
    @end
    其中condition指判断条件,text指判断运行分支后执行的JS脚本源码。PS:注意条件判断分支中@elif,和JS中的else if是一样的,但是需要注意关键字的不同。
  • @set 语句
    @set是用来创建条件编译变量的语句。创建的条件编译变量必须以@开头,如@newVar。另外,条件编译变量只支持数字和布尔类型的值,不支持字符串。赋值的时候,如果需要用到多元表达式,必须用圆括号括起来,否则,可能会引发编译错误或者赋值不正确。而表达式中支持如下运算符(按优先级排序):
    1. ! ~
    2. * / %
    3. + -
    4. << >> >>>
    5. < <= > >=
    6. == != === !==
    7. & ^ |
    8. && ||
    特别地,如果一个变量没有定义过,他的值为NaN。而因为NaN的特性,我们可以用条件语句判断一个条件编译变量是否已定义:
  • 其他条件编译变量
    IE为条件变量预定义了一组变量,如下表所示:
    变量描述
    @_win32在 Win32 系统上运行为 true。
    @_win16在 Win16 系统上运行为 true。
    @_mac在 Apple Macintosh 系统上运行为 true。
    @_alpha在 DEC Alpha 处理器上运行为 true。
    @_x86在 Intel 处理器上运行为 true。
    @_mc680x0在 Motorola 680x0 处理器上运行为 true。
    @_PowerPC在 Motorola PowerPC 处理器上运行为 true。
    @_jscript永远为 true。
    @_jscript_build包含 Jscript 脚本引擎创建号。
    @_jscript_version包含以 major、minor 为格式的 Jscript 版本号。

    当上表中变量不为true时,会作为NaN处理。

  我认为,虽然条件注释和条件编译不是标准化的东西,但是他的存在还是有一定价值的(例如用于处理IE的特殊化特效处理——就是IE搞的特殊太多……)。不过,这东东或许太偏了,不如window.navigator用得顺手。大家就当增长见闻吧——虽然现在基本没什么机会会看到了。呵呵!

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值