3.1语法
ECMAScript中的变量、函数名和操作符都区分大小写。
标识符是指变量、函数、属性的名字,或者函数的参数。ECMAScript标识符采用驼峰大小写格式。
ECMAScript使用C风格的注释,包括单行注释和块级注释。
ECMAScript 5引入了严格模式(strict mode),可以在整个脚本中启用严格模式,也可以指定函数在严格模式下执行。“use strict”
语句结尾的分号不是必需的,但建议任何时候都不要省略。
3.2关键字和保留字
关键字可用于控制语句的开始或结束,或者用于执行特定操作。
3.3变量
ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符。
不建议修改变量所保存值的类型,但这种操作在ECMASCript中完全有效。
使用var操作符定义的变量 将成为定义该变量的作用域中的局部变量。虽然省略var操作符可以定义全局变量,但这布置推荐的做法。
可以在一条语句定义多个变量,把每个变量用逗号分隔开即可。
3.4数据类型
ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined、null、boolean、number和string.还有一种复杂数据类型-object,object本质上是由一组无序的名值对组成的。
typeof可以检测给定变量的数据类型。值是对象或者null(因为特殊值null被认为是一个空的对象引用)返回“object”,值是函数返回“function”。typeof操作符的操作数可以是变量,也可以是数值字面值,typeof是一个操作符而不是函数,因此圆括号可有可无。
undefined类型只有一个值,即特殊的undefined,在使用var声明变量单未对其加以初始化时,这个变量的值就是undefined。ECMAScript第3版引入这个值就是为了正式区分空对象指针和未经初始化的变量。对未初始化和未声明的变量执行typeof操作符都返回了underfined值。
null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空指针对象。undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。只要意在保存对象的变量还没有真正保存对象,就应该明确地让变量保存null值。
boolean类型只有两个字面值:true和false。这两个值和数字值不是一回事,因此true不一定等于1,而false也不一定等于0.可以对任何数据类型的值调用Boolean()函数,而且总会返回一个boolean值。
number类型使用IEEE754格式来表示整数和浮点数值。八进制字面值的第一位必须是0,十六进制字面值的前两位必须是0x。浮点数值的最高精度是17位小数,但在经行算术计算时其精确度远远不如整数。想要确定一个数值是不是有穷的,可以使用inFinite()函数。NaN即非数值(not a number)是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。任何涉及NaN的操作都会返回NaN,NaN与任何数都不相等,包括NaN本身。isNaN()函数可以接受任何类型的一个参数,判断这个参数是否“不是数值”。Number()、parseInt()和parseFloat()可以把非数值转化为数值。Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转化成数值。NUmber()的转换规则:如果是null返回0,如果是undefined,返回NaN,空字符串返回0。parseInt()函数在转换字符串时,更多的是看其是否符合数值模式,它会忽略字符串前面的空格,直至找到第一个非空字符串。如果第一个字符不是数字字符或者负号,parseInt()返回NaN,(空字符串返回NaN)。parseInt()函数可以加入第二个参数,指定转换时使用的基数。parseFloat()只解析十进制值。
String类型用来表示字符串。任何字符串的长度都可以通过访问其length属性取得。ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后在用另一个包含新值的字符串填充该变量。toString()和String()可以把一个值转换为一个字符串。toString()用来返回相应值的字符串表现,可以设定输出数值的基数。数值、布尔值、对象和字符串值都有toString()方法,但null和undefined值没有这个方法。String()可以将任何类型的值转换为字符串,null返回“null”,undefined返回“undefined”。
ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。在ECMAScript中,object类型是所有它的实例的基础。Constructor保存着用于创建当前对象的函数。hasOwnProperty(propertyName)用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。isPrototypeOf(object)用于检查传入的对象是否是另一个对象的原型。propertyIsEnumerable(propertyName)用于检查给定的属性是否能够使用for-in语句来枚举。toLocaleString()返回对象的字符串表示。toString()返回对象的字符串表示。valueOf()返回对象的字符串、数值或布尔值表示。
3.5操作符
ECMAScript操作符的与众不同之处在于,它们能够适用于许多值,例如字符串、数字值、布尔值,设置对象。
一元操作符:递增和递减操作符,++age,--age,age++,age--,这4个操作符对任何值都适用,不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。一元加和减操作符。
位操作符用于最基本的层次上,即按内存中表示数值的位来操作数值。对特殊的NaN和Infinity值应用位操作时,这两个值都会被当成0来处理。按位非(not),用~表示,按位非操作的本质是操作数的负值减1.按位与(AND),用&表示。按位或(or),用|表示。按位异或,用^表示。左移,用<<表示。有符号的右移,用>>表示。无符号的右移,用>>>表示。
布尔操作符:逻辑非!,逻辑与&&,逻辑或||
乘性操作符:乘法、除法和求模。
加性操作符:加法和减法。
关系操作符:大于、小于、小于等于和大于等于。
相等操作符:相等和不相等——先转换在比较;全等不全等——仅比较而不转化。
条件操作符
复制操作符
逗号操作符用于声明多个变量;但除此之外,逗号操作符还可以用于赋值。在用于赋值时,逗号操作符总会返回表达式中的最后一项。
3.6语句
if语句:if (condition) statement1 else statement2
do-while语句是一种后循环测试语句,即只有在循环体中的代码执行之后,才会测试出口条件。
do {
statement
}while(expreesion);
while语句属于前测试循环语句,也就是说,在循环体内的代码被执行之前,就会对条件求值。
for语句也是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力。for (initialization; expression; post-loop-expression) statement
for-in语句是一种精准的迭代语句,可以用来枚举对象的属性
label语句可以在代码中添加标签,以便将来使用。
break和continue语句用于在循环中精确地控制代码的执行。break语句会立即退出循环,强制继续执行循环后面的语句。而continue语句虽然也是立即退出循环,但退出循环后从循环的顶部继续执行。
with语句的作用是将代码的作用域设置到一个特定的对象中。定义with语句的目的主要是为了化简多次编写同一个对象的工作。
switch语句是一种流控制语句。
3.7函数
ECMAScript中的函数使用function关键字来声明。
ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型,原因是ECMAScript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组中包含哪些参数。在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。使用length属性可以确定传递进来的参数个数。命名的参数只提供便利,而不是必需的。argements对象可以与命名参数一起使用,它的值永远与对应命名参数的值保持同步。arguments对象中的值会自动反映到对应的命名参数,但这种影响是单向的,修改命名参数不会改变arguments中对应的值。
ECMAScript函数不能像传统意义上那样实现重载。如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。