数据类型:
原始类型(primitive type)和对象类型(object type)。
原始类型包括:
string number boolean null undefined
对象是属性(property)的集合,每个属性都由”名/值对“组成。
其中有一个特殊的对象——全局对象(global object)
数组和函数都是对象,它们有自己独特的语法。
如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)。
每个构造函数定义了一类对象——由构造函数初始化的对象的集合。类可以看作是对象类型的子类型。还有Date、RegExp、Error类
Javascript解释器有自己的内存管理机制。当不再有任何一个引用指向一个对象,解释器就会知道这个对象没用了,然后自动回收它所占用的内存资源。
3.1 数字
JS采用IEEE 754标准定义的64位浮点格式表示数字。
- 注意:JS中实际的操作(比如数组索引,位操作符)则是基于32位整数。
- 注意:在任何数字直接量前添加负号可以得到它的负值,但负号是一元求反运算符,并不是数字直接量语法的组成部分。
3.1.1 整型直接量
可识别十进制、十六进制
3.1.2浮点型直接量
整数部分+小数点+小数部分
指数计数法
3.1.3 算术运算
算数运算符
复杂运算:通过作为Math对象的属性定义的函数和常量来实现。
JS中的算术运算在溢出、下溢和被零整除时不会报错。
溢出:数字运算结果超过了Js所能表现的数字上限,结果为Infinity或-Infinity
下溢:运算结果无限接近0,并比JS所能表现的最小值还小。返回
0,若是负数发生下溢,返回负零。
被零整除返回Infinity或-Infinity。
返回NaN:
0/0
Infinity/Infinity
给任意负数作开方运算
算术运算符和不是数字或无法转换为数字的操作数一起使用。使用x!=x判断NaN,只有这个值返回true
函数IsNaN()参数是NaN或非数字值返回true
函数IsFinite()参数不是NaN或Infinity、-Infinity返回true
0 = -0 (作为除数时要留心)
3.1.4 二进制浮点数和四舍五入错误
var x =0.3-0.2
var y =0.2-0.1
x == y //false
x = 0.1 //false
y = 0.1 //true
舍入误差
3.1.5 日期和时间
Date()构造函数等
3.2 文本
字符串是一组由16位值组成的不可变的有序序列。
3.2.1 字符串直接量
在ECMAScript5中字符串可拆分成多行,每行必须用反斜线\结束,另起一行用\n。
在JS和html中各自使用独立的引号分隔。
3.2.2 转义字符
3.2.3 字符串的使用
用+连接字符串
字符串的多个属性
3.2.4 模式匹配
RegExp()函数用来创建表示文本匹配模式的对象。这些模式称为正则表达式。
3.3 布尔值
布尔值包含toString()方法。
3.4 null和undefined
null是关键字,undefined是预定义的全局变量
3.5 全局对象
3.6 包装对象
存取字符串、数字或布尔值的属性时创建的临时对象称为包装对象,它只是偶尔用来区分字符串值和字符串对象、数字和数值对象以及布尔值和布尔对象。
var str = "string" ;
此时str是基本字符串类型
str.length = 6 可以这样使用的原因是js生成了值和str一样的临时对象,操作完成后临时对象被删除。
尝试给str增加一个方法:
str.t = 3
查看值:str.t = undefined 临时对象被删除
3.7 不可变的原始值和可变的对象引用
原始值(string、number、boolean、null和undefined)与对象有着根本的区别。原始值不可更改!
通常将对象称为对象引用(reference type),对象值都是引用。
3.8 类型转换
3.8.1 转换和相等性
3.8.2 显示类型转换
Number("3") //3
String(false) //"false"或使用false.toString()
Boolean([ ]) //true
Object(3) //new Number(3)
- 注意:除了null和undefined之外的任何值都具有toString()方法
3.8.3 对象转换为原始值
对象——boolean 全部为true
对象——string
对象——number
3.9 变量声明
3.10 变量作用域
3.10.1 函数作用域和声明提前
函数的作用域是指在函数内声明的所有变量在函数体内始终是可见的。这意味着变量在声明之前甚至已经可用(声明提前)
3.10.2 作为属性的变量
JS全局变量是全局对象的属性