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语句