JavaScript建立在一些非常好的想法和少数非常坏的想法之上。
非常好的想法包括函数,弱类型,动态对象和一个富有表现力的对象字面量的表示法,
坏的想法包括基于全局变量的编程模型。
JavaScript的函数是基于词法作用域的顶级对象。Javascript是第一个成为主流的Lambda语言。相对于Java而言,JavaScript于Lisp和Scheme有更多的共同点。它是披着C外衣的Lisp。这使得JavaScript成为一个非常强大的语言。
现在大部分变成语言都流行要求强类型。其原理在于强类型允许编译器在编译时检查错误。我们越早检查和修复错误,付出的代价越小。Javascipt是弱类型的语言,所以JavaScript编译器不能检测出来类型错误。事实证明,强类型并不能让你的测试工作轻松,另一个方面,弱类型是自由的。无需建立复杂的类层次,不用做强制造型。
JavaScript有非常强大的字面量表示法。通过列出对象的组成部分,他们就能简单的被创建出来。这种表示法是促使我创建流行的数据交换格式--JSON的灵感。
JavaScript依赖于全局变量来进行连接,所有编译单元的所有顶级变量被撮合到一个被称为全局对象的公共命名空间中。这是一个糟糕的事情,因为全局变量是魔鬼,并且在JavaScript中它们是基础性的。
JavaScript保留字:
代码如下:
abstract boolean break byte case catch char class const continue debugger default delete do double esle enum export extends false final finally float for function goto if implements import in instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var volatile void while with
数字:64位的浮点数
如果一个数字字面量有指数部分,那么这个字面量的知识由e之前的部分乘以10的e之后部分的次方计算出来的。所以100和1e2是相同的数字。
值NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它自己。你可以用函数isNaN(number)检测NaN。
值Infinity表示所有大于1.79769313486231570e+308的值。
JavaScript有一个对象Math,它包含一套作用于数字的方法, Math.floor(number)方法将一个数字转换成一个整数。
字符集:
字符--16位(Unicode是一个16位的字符集)
JavaScript没有字符类型。要表示一个字符,只须创建仅包含一个字符的字符串即可。
\u约定允许指定用数字表示字符吗位。 "A" === "\u0041"
字符串有一个length属性。例如,"seven".length 是5。
字符串是不可变的,一旦字符串被创建,就永远无法改变它。但是通过+运算符去连接其他的字符串从而得到一个新字符串是很容易的。两个包含着完全相同的字符且字符顺序也相同的字符串被认为是相同的字符串。
所以: 'c' + 'a' + 't' === 'cat'
JavaScript的简单类型包括数字,字符串,布尔值(true和false),null值和undefined值。其他所有的值都是对象。
对象是属性的容器,其他每个属性都拥有名字和值。
属性的名字可以是包括空字符串在内的任意字符串。
属性值可以是除underfined值之外的任何值。
JavaScript中的对象是无类别的。它对新属性的名字和值没有约束。对象适合用于收集和管理数据。对象可以包括其他对象,所以它们可以容易地表示成树形或图形结构。
JavaScript包括一个原型链特性,允许对象继承另一个对象的属性。正确的使用它能减少对象初始化的时间和内存消耗。
对象字面量:
对象字面量提供了一种非常方便的创建新对象值得表示法。一个对象字面量就是包围在一对花括号中的零或多个“名/值”对。对象字面量可以出现在允许表达式出现的地方。
var empty_object = {};
var stooge = {
"first-name":"Jerome",
"last-name":"Howard"
};
属性名可以使包括孔字符串在内的任何字符串。在对象字面量中,如果属性名是一个合法的JavaScript标示符且不是保留字,并不强制要求用引号括住属性名。所以用引号括住“first-name”是必须的,但是否括住first_name则是可选的。逗号用来分隔多个"名/值"对。
属性的值可以从包括另一个对象字面量在内的任意表达式中获得。对象是可以嵌套的。
代码如下:
var flight = { airline:"Oceanic", number:815, departure: { IATA:"SYD", time:"2004-09-22 14:55", city:"Sydney" }, arrival: { IATA:"LAX", time:"2004-09-23 10:42", city:"Los Angeles" } };