JavaScript小结

  

  1.  JavaScript 的作用域完全是由函数来决定的,if、for 语句中的花括号不是独立的作用域。

  2.  将C/C++代码编译为JavaScript

    C/C++如今也可以用来编写Web应用程序,同样可以将它们编译为JavaScript。一些工具如下。

    • Emscripten:Mozilla开发的LLVM后端,可以将任何通过LLVM前端(比如C/C++ Clang)生成的LLVMIR中间码编译成JavaScript代码。
    • mala:可以将vala代码(vala代码在编译时,首先会编译为C代码)编译为JavaScript
    • Mandreel:可以将C++和Objective-C代码编译为高度优化的JavaScript源码
    • Clue:一个C语言编译器,可以将C语言代码编译为高质量的Lua、Javascript或Perl代码。 

    由于Emscripten可以将LLVM二进制代码编译成JavaScript,LLVM是一种很流行的中间编译格式,几乎所有语言都有LLVM编译器,因此Emscripten也可以作    为大部分语言转换为JavaScript的通用工具。

  3.  一般语言中,逻辑运算与布尔运算是等义的,其运算元与目标类型都是布尔值(true/false)。 JavaScript当然支持这种纯布尔运算。不但如此,JavaScript还包括    另外一种逻辑运算,它的表达式结果类型是不确定的。

    只有“逻辑或(||)”和“逻辑与(&&)”两种运算能做这样的事。它们的使用方法与运算逻辑都与基本的布尔运算一致,例如:
      var str ='hello';
      var obj ={};
      x= str ||obj;
      y= str &&obj;
    这种运算的特别之处在于:运算符“||”与“&&”既不改变运算元的数据类型,也不强制运算结果的数据类型。除此之外,还有以下两条特性:
    � 运算符会将运算元理解为布尔值,以进行布尔运算;
    � 运算过程(与普通布尔运算一样)是支持布尔短路的。
    由于支持布尔短路,因此在上例中“str|| obj”表达式只处理第一个运算元就可以有结果,其结果值是str——转换为布尔值时为true,不过由于前面所
    述的“不强制运算结果的数据类型”,所以表达式的结果值仍是“str”。同样,若以“str&&obj”为例,其返回结果值就会是“obj”了。

    这种逻辑运算的结果一样可以用在任何需要判断布尔条件的地方,包括if或while语句,以及复合的布尔表达式中。例如:
    (续上例)
      //用于语句
      if (str ||obj) {
        ...
      }
    //用于复杂的布尔表达式
      z = !str &&!(str ||obj);
    由于表达式的运算元可以是值或其它表达式(包括函数调用等),因此连续的逻辑运算也可以用来替代语句。这也是一种被经常提及的方法,

    � 1.3.3.1 通过表达式消灭分支语句
    � 1.15使用更复杂的表达式来消减IF语句

 

 

posted on 2013-11-01 15:20  南原始天  阅读(308)  评论(0编辑  收藏  举报