1、语法
1.1 区分大小写
变量、函数名和操作符都区分大小写
1.2 标识符
标识符是指变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则组合起来的一或多个字符
- 第一个字符必须是一个字母、下划线(_)或一个美元符号($)
- 其它字符可以是字母、下划线、美元符号或者数字
标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,但我们不推荐这样做
按照惯例,ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个有意义的单词的首字母大写。
1.3 注释
ECMAScript使用C风格的注释,包括单行注释和块级注释。
1.4 严格模式
ECMAScript5引入了严格模式的概念。严格模式是为Javascript定义了一种不同的解析与执行模型。在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作会抛出错误。要在整个脚本中启用严格模式,可以在顶部添加如下代码:"use strict";
在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行
1.5 语句
ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾
虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它。因为加上这个分号可以避免很多错误。
可以使用C风格的语法把多条语句组合到一个代码块中,即代码块以左花括号({}开头,以右花括号(})结尾
2、关键字和保留字
ECMA-262的关键字
break | do | instanceof | typeof |
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger* | function | this | with |
default | if | throw | delete |
in | try |
ECMA-262保留字
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
3、变量
是松散类型,可以用来保存任何类型的数据。每个变量仅仅是一个用于保存值的占位符而已。定义变量时使用var操作符,后跟变量名(即一个标识符)。没有赋值的变量会保存一个特殊的值undefined。使用var操作符定义的变量将成为定义该变量的作用域中的局部变量。如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁。
可以使用一条语句定义多个变量,只要每每个变量用逗号分隔开即可。
4、数据类型
有5种简单数据类型:Undefined,Null, Boolean,Number,String
1种复杂数据类型:Object
4.1 typeof操作符
负责提供给定变量的数据类型。对一个值使用typeof操作符可以返回下列值
"undefined":这个值未定义
"boolean":是布尔值
"string":是字符串
“number":是数值
"object":是对象或null
"function":是函数
typeof是操作符,不是函数。
4.2 Undefined类型
只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值是undefined.
4.3 Null类型
也是只有一个值,这个特殊的值是null。表示一个空对象指针,这也正是使用typeof操作符检测null值时会返回"object"的原因。
如果定义的变量准备在将来用来保存对象,那么最好将该变量初始化为null而不是其他值。这样只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
null和undefined的相等性测试返回true
4.4 Boolean类型
有两个字面值:true和false
转为Boolean类型时使用转型函数Boolean()
数据类型 | 转换类true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | 空字符串 |
Number | 任何非零数字值 | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a(表示不适用) | undefined |
对于if语句自动执行相应的Boolean转换
4.5 Number类型
支持十进制,八进制,十六进制
八进制字面值的第一位必须是0,然后是数字序列(0-7)
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0-9和a-f),字母可以大写也可以小写。
(1)浮点数值
必须包含一个小数点,并且小数点后面必须至少有一个数字。因为保存浮点数值需要的内存空间是保存整数值的两倍,所在ECMAScript会不失时机地将浮点数值转换为整数。
对于那些极大或者极小的数值,可以用e表示法。
浮点数值的最高精度是17位小数。
(2)数值范围
最小数值保存在Number.MIN_VALUE,值是5e-324
最大数值保存在Number.MAX_VALUE,值是1.7976931348623157e+308
如果超过范围,自动转换成Infinity值。使用isFinite()函数判断是否在最小与最大值之间
(3) NaN
非数值,用于表示一个本来要返回数值的操作数未返回数值的情况。在ECMAScript中,任何数值除以0会返回NaN
任何涉及NaN的操作都会返回NaN
NaN与任何值都不相等,包括NaN本身
isNan()函数来判断是否不是数值
(4)数值转换
有3个函数将非数值转换类数值:Number(),parseInt()和parseFloat()。第一个可以用于任何数据类型,后两个用于把字符串转换成数值
Number()函数转换规则
- Boolean值,true和false分别转换为1和0
- 数字值,只是简单的传入和返回
- null值,返回0
- undefined,返回NaN
- 字符串,如果字符串中只包含数字(包含前面带正号和负号的情况),则将其转换为十进制数值;如果字符串中包含有效的浮点格式,则将其转换为对应的浮点数值;如果字符串中包含有效的十六进制格式,则将其转换为相同大小的十进制整数值;如果字符串是空的(不包含任何字符),则将其转换为0;如果字符串中包含除上述格式之外的字符,则将其转换为NaN;
- 对象,调用对象的valueOf方法
4.6 String类型
表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号(")或引号(')表示。
4.7 Object类型
是一组数据和功能的集合。通过执行new操作符后跟要创建的对象类型的名称来创建。
Constructor:保存着用于创建当前对象的函数。
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(不是在实例原型中)是否存在
isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句
toLocalString():返回对象的字符串表示,该字符串与执行环境 的地区对应
toString():返回对象的字符串表示
valueOf():返回对象的字符串、数值或布尔值表示。
5、操作符
5.1 一元操作符
- 递增和递减操作符
- 一元加和减操作符
5.2 位操作符
- 按位非~
- 按位与&
- 按位或|
- 按位异或^
- 左移<<
- 有符号的右移>>
- 无符号的右移>>>
5.3 布尔操作符
- 逻辑非!
- 逻辑与&&
- 逻辑或||
5.4 乘性操作符
- 乘法*
- 除法/
- 求模%
5.5 加性操作符
- 加法+
- 减法-
5.6 关系操作符
<,>,<=,>=
5.7 相等操作符
=,!=,===,!==
5.8 条件操作符
variable = boolean_expression ? true_value: false_value
5.9 赋值操作符
=
5.10 逗号操作符
可以在一条语句中执行多个操作
用于赋值时,总是返回表达式中的最后一项
6、语句
6.1 if语句
6.2 do-while语句
6.3 while语句
6.4 for语句
6.5 for-in语句
6.6 label语句
6.7 break和continue语句
6.8 with语句
6.9 switch语句
7、函数
在函数定义时不必指定是否返回值。return语句也可以不带有任何返回值
7.1 理解参数
ECMAScript函数不介意传递时来多少个参数,也不在乎传进来参数是什么数据类型。
函数体内可以通过arguments对象来访问这个参数数组。其实arguments对象只是与数组类似。
7.2 没有重载
ECMAScript函数不能像传统意义上那样实现重载