3.1 语法
3.1.1 区分大小写
3.1.2 标识符
- 第一个字母: 字母、_、$
- 其它字母: 字母、_、$、数字
- 驼峰大小写格式(ECMAScript惯例但不强制)
3.1.3 注释
3.1.4 严格模式
启用方式
- 在整个脚本中启用
1 | //在顶部添加 |
- 指定某些函数在严格模式下执行
1 | function doSomething(){ |
行为特点
- 在ECMAScript 5中开始支持严格模式
- 严格模式下ECMAScript3的一些不确定行为将会处理
- 某些不安全的操作会抛出错误
3.1.5 语句
分号结尾(不推荐省略分号)
- 避免不完整的输入;
- 可以放心地通过删除多余的空格来压缩ECMAScript代码;
- 在某些情况下会增进性能;
代码块使用{}(可以省略的情况下也不推荐省略)
- 编码意图更加清晰;
- 降低修改代码时出错的几率;
3.2 关键字和保留字
关键字(26)
break | case | catch | continue | debugger* | default |
---|---|---|---|---|---|
delete | do | else | finally | for | function |
if | in | instanceof | new | return | switch |
this | throw | try | typeof | var | void |
while | with |
保留字(第三版全部+第五版let、yield)(31)
abstract | boolean | byte | char | class | const |
---|---|---|---|---|---|
debugger | double | enum | export | extends | final |
float | goto | implements | import | int | interface |
long | native | package | private | protected | public |
short | static | super | synchronized | throws | transient |
volatile |
保留字(第五版 严格模式 8)
class | const | enum | extends | super | export | import |
---|---|---|---|---|---|---|
保留字(第五版 严格模式 额外施加限制的部分)
implements package public interface private protected let static yield
3.3 变量
特点:松散类型(可以保存任何类型的数据)
使用:
- 局部变量
1 | //函数内部定义+var |
- 全局变量
1 | /* |
注意:
- 可以使用一条语句定义多个变量,初始化和不初始化均可;
1 | //通过换行和缩进提高可读性 |
- 在严格模式下,不能定义名为eval或arguments的变量,否则会导致语法错误
3.4 数据类型
基本数据类型(简单数据类型)(5)
Undefined | Null | Boolean | Number | String |
---|---|---|---|---|
复杂数据类型(1)
Object
3.4.1 typeof操作符
说明:检测给定变量的数据类型,返回字符串
注意:
- null被认为是一个空对象;
- 函数是特殊的对象,typtof对函数和普通对象进行了区分;
- Sfari 5-、Chrome 7-在对正则表达式调用typeof是返回”function”,其它返回”Object”
使用:
1 | var message = "some string"; |
返回值:
类型说明 | “typeof” |
---|---|
未声明 | “undefined” |
布尔值 | “boolean” |
字符串 | “string” |
数值 | “number” |
对象或null | “object” |
函数 | “function” |
3.4.2 Undefined类型(派生自Null)
两种情况:
1 | //1. 声明后默认取得undefined |
3.4.3 Null类型
特点: 只有一个值(null)得数据类型
null: 空对象指针
1 | var car = null; |
使用: 如果定义的变量将来用来引用对象,最好将该变量初始化为null,方便判断该变量是否已经保存了一个对象的引用
1 | if(car != null){ |
null和undefined:
- 联系:
1 | alert(null == undefined);//true |
- 区别:无论在什么情况下都没有必要把一个变量的值显式设置为undefined,同样的规则对null不适用。
3.4.4 Boolean类型
两个字面值: true和false区分大小写
各种类型转换为Boolean类型:
3.4.5 Number 类型
特点:使用IEEE754格式来表示整数和浮点数(双精度数值),存在舍入误差
整数分类:在进行计算时都被转成十进制计算
- 十进制
- 八进制(在严格模式下不支持):第一位必须为0
- 十六进制 :前两位必须是0x
1. 浮点数值(最该精度17位小数)
写法
1 | var floatNum1 = 1.1; |
2. 数值范围
最小数
Number.MIN_VALUE(5e-324)最大数
Number.MAX_VALUE(1.7976931348623157e+308)查出范围的值(无法继续参与运算)
-Infinity(负无穷) Infinity(正无穷)
或
Number.NEGATIVE_INFINITY(负无穷) Number.POSITIVE_INFINITY(正无穷)
检测数值是否有效
1 | var result = NUmber.MAX_VALUE+Number.MAX_VALUE; |
3. NaN(Not a Number)
特点:
- 任何涉及NaN的操作都返回NaN;
- NaN和任何值都不想等,包括其本身
1 | alert(NaN == NaN);//false |
- isNaN(val) —-检测一个值是否是NaN
4. 数值转换(非数值->数值)
任何类型->数值: Number()
字符串->整数: parseInt()
- 字符串->浮点数: parseFloat()
3.4.6 String类型
说面: 用于表示由零个或多个16位Unicode字符组成的字符序列
注意:以单引号开头必需以单引号结尾,双引号亦。
1. 字面直接量
2. 字符串的特点
不可变的^#{1,4}\d
3. 转换为字符串
toString(): null和undefined以外的所有数据类型都包含该方法
- 非数字调用toString(): 没有参数
- 数字调用toString(): 可以传递一个参数,指定输出任意有效进制格式的字符串
1 | var num =10; |
String():不知道要转换的值是不是null和undefined的情况下使用
- 有toString()方法直接调用;
- 值是null,返回“null”;
- 值是undefined,返回”undefined”;
val+””: 隐式调用toString()
3.4.7 Object 类型
注意:ECMA-262不负责定义宿主对象,因此BOM和DOM中的宿主对象可能会也可能不会继承Object。
Object的每个实例都具有下列属性和方法:
- Constructor: 保存着用于创建当前对象的函数;
- hasOwnProperty(propertyName): 用于检查传入的对象是否是另一个对象的原型;
- propertyIsEnumerable(propertyName): 用于检查给定的属性能否使用for-in枚举;
- toLocaleString(): 返回对象的字符串表示,该字符串与执行环境的地区对应;
- toString(): 返回对象的字符串表示
- valueOf(): 返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
3.5 操作符
3.5.1 一元操作符
☑ 说明: 只能操作一个值的操作符叫做一元操作符。
递增和递减操作符
☑ 分类
分类 | 前置型 | 后置型 |
---|---|---|
递增 | ++i | i++ |
递减 | –i | i– |
☑ 操作数类型: 任何类型的值(整数、字符串、布尔值、浮点数值、对象)
操作数类型 | 运算前自动转换为 |
---|---|
字符串(包含有效数字字符) | 数字值 |
字符串(不包含有效数字字符) | NaN |
布尔值 | 0(false) 或 1(true) |
浮点数 | 不转换 |
对象 | 先调用对象的 valueOf() 方法取得返回值,然后应用上述规则进行类型转换(如果 valueOf() 返回的也是个对象也没关系,递归调用下去,直到返回非对象的值) |
1 前置型
☑ 说明: 位于要操作的变量之前。
☑ 注意: 执行前置递增或前置递减时,变量的值都是在语句中被求值以前改变的(也就是存在副效应)。
1 | var age = 29 |
1 | // 前置递减 |
2 后置型
☑ 说明: 位于要操作的变量之后。
☑ 注意: 在包含它们的语句被求值之后才执行。
1 | var num1 = 2 |
等价于
1 | var num1 = 2 |
类型转换
1 | var s1 = '2' |
+、-
☑ 用途: 主要用于基本的算数运算,也可以像前面示例所展示的一样用语转换数据类型。
操作符 | 说明 |
---|---|
+ | 一元加操作符(取正) |
- | 一元减操作符(取负) |
☑ 类型转换: 对非数字应用 +
或 -
,该操作符会像 Number()
转换函数一样对这个值进行转换。
操作数类型 | 转换为 |
---|---|
布尔值 | 0(false) 或 1(true) |
字符串 | 会按照一组特殊的规则进行解析 |
对象 | 先调用她们的 valueOf() 和(或) toString() 方法,再转换得到的值 |
1 | var s1 = '01' |