1. 语法
标识符:由一个字母开头,后面选择性的添加一个或多个字母、数字、下划线。不能使用一下保留字:
abstract
boolean break byte
case catch char class const continue
debugger default delete do double
else enum export extends
false final finally float for function
goto
if implements inport in instanceof int interface
long
native new null
package private public protected
return
short static super switch synchronized
this throw throws transient true try typeof
var volatile void
white with
此外还有:undefined NaN Infinity
保留字不可用来命名变量或参数,不能作为对象的属性。
2. 数字
JavaScript只有一个单一的数字类型,内部表示为64位浮点数,类似java的double。
他没有分离出整数类型,所以1和1.0是相同的值。避免了短整数溢出问题,避免了因数字类型导致的错误。
指数形式:1e2和100时相同的数字。
值NaN是一个数值,表示不能产生正确结果的运算结果,NaN不等于任何值,包括它自己。可以用函数isNaN(number)检测NaN。
Infinity表示所有大于1.79769313486231570e+308的值。
数字拥有方法,JavaScript有一个对象Math,包含一套作用于数字的方法。例如,可以用Math.floor(number)方法将一个数字转换成一个整数。
3. 字符串
用单引号或双引号包围,它可以包含0或多个字符,\(反斜杠符号)为转义字符。
JavaScript在被创建的时候,Unicode是一个16位的字符集,所以JavaScript中的所有字符都是16位的。
JavaScript没有字符类型,可用一个字符的字符串表示。
\u约定允许指定用数字表示的字符码位。例如:"A" === "\u0041"。
字符串有一个length属性,例如:"seven".length是5。
字符串一旦创建将永远无法改变,可通过“+”运算符去连接其他字符串产生新的字符串。
两个包含完全相同的字符且字符顺序也相同的字符串被认为是相同的字符串,所以: 'c' + 'a' + 't' === 'cat' 是true。
字符串有一些方法,例如: 'cat'.toUpperCase() === 'CAT'。
4. 语句
一个编译单元包含一组可执行的语句。在web浏览器中,每个<script>标签都提供一个被编译且立即执行的编译单元,因为缺少连接器,JavaScript吧他们一起抛入一个公共的全局名字空间中。
当var语句被用在函数的内部时,它定义了这个函数的私有变量。
switch、while、for和do语句允许有一个可选的前置标签(label),配合break语句来使用。
语句按照从上到下的顺序执行。JavaScript可以通过条件语句(if和switch)、循环语句(while、for和do)、强制跳转语句(break、return和throw)和函数调用来改变这个执行顺序。
代码块是包含在一对花括号中的一组语句。不像许多其他的语言,JavaScript中的代码块不会创建一个新的作用域,因此变量应该被定义在函数的顶端,而不是在代码块中。
下面列出的值被当作假(false):
- false
- null
- undefined
- 空字符串''
- 数字0
- 数字NaN
其他所有的值都被当作真,包括true、字符串‘false’,以及所有的对象。
for循环的另一种形式(被称为 for in语句)会枚举一个对象的所有属性名(或键名)。每次循环中,对象的另一个属性名字符串被赋值给for和in之间的变量。
通常需要通过检测object.hasOwnProperty(variable)来确定这个属性名就是该对象的成员,还是从其原型链里找到的。
for (myvar in obj) {
if (obj.hasOwnProperty(myvar)) {
...
}
}
5. 表达式
最简单的表达式是字面量值(比如字符串或数字)、变量、内置的值(true、false、null、undefined、NaN和Infinity)、以new前导的调用表达式、以delete前导的属性存取表达式、包在圆括号中的表达式、以一个前缀运算符作为前导的表达式,或者表达式后面跟着:
- 一个插入运算符与另一个表达式;
- 三元运算符?后面跟着另一个表达式,然后接一个:,再然后接第三个表达式;
- 一个函数调用;
- 一个属性存取表达式。
. [] () | 属性存取及函数调用 |
delete new typeof + - ! | 一元运算符 |
* / % | 乘法、除法、取模 |
+ - | 加法/连接、减法 |
>= <= <> | 不等式运算符 |
=== !=== | 等式运算符 |
&& | 逻辑与 |
|| | 逻辑或 |
?: | 三元 |
typeof运算符产生的值有‘number’、‘String’、‘boolean’、‘undefined’、‘function’和‘object’。如果运算数是数组或null,那么结果是‘object’,这是不对的。
6. 字面量
对象字面量是一种方便指定新对象的表示法。属性名可以是标识符或字符串。这些名字被当作字面量名而不是变量名来对待,所以对象的属性名在编译时才能知道。属性的值就是表达式。之后详解。
数组字面量是一个方便指定新数组的表示法。之后详解。
7. 函数
函数字面量定义了函数值。它可以有一个可选的名字,用于递归地调用自己。它可以指定一个参数列表,这些参数将作为变量由调用时传递的实际参数(arguments)初始化。函数的主题包括变量定义和语句。之后详解。