引用类型
new
使用 new
操作符来明确其后面跟着一个构造函数,而非普通的函数:
// 返回一个对象
var person = new Object();
// 返回 Object 函数的返回值
var person = Object();
对象字面量
var person = {
name: "Nicholas",
age: 29
}
与以下等价:
var person = {}
person.name = "Nicholas"
person.age = 29
下标方式访问属性
除了点语法,还可以以下标方式访问属性。同时,下标访问意味着属性可以拥有空格:
// 点语法不支持空格:person.first name = "Nicholas"
person["first name"] = "Nicholas"
当然,更建议使用点语法访问属性。
Array
// 创建 length 为 20 的 数组,每一项都是 undefined
var colors = new Array(20)
// 明确元素
var colors = new Array("red", "blue", "green")
// Array 允许省略 new 操作符
var colors = Array("red", "blue", "green")
// 可以用 [] 直接创建数组
var colors = ["red", "blue", "green"]
// 长度
alert(colors.length)
访问下标范围外的数会返回 undefined
,且不会影响到其数组内部,但是赋值是有效的:
var colors = ["red", "blue", "green"]
alert(colors[99])
alert(colors.length) // 3
colors[99] = "black"
alert(colors.length) // 100
数组的个数上限:4294967295
。
因为一个网页可能有多个框架的 Array 实现,所以用 instanceof
来判断是否为数组是不可靠的。
但可以用 Array.isArray()
来判断是否为数组。
用 join
方法来拼接元素。
支持栈操作,可以用 push
和 pop
方法。
支持队列操作,可以用 push
和 shift
方法,或者用 unshift
和 pop
。
数组自带 reverse
和 sort
方法。
sort
方法默认对每个元素的 toString()
值进行字典排序,所以不适合 Number 类型的排序。不过可以传入一个自定义的比较函数,比如:
function compare(val1, val2) {
if (val1 < val2) {
// 只要返回负数即可,下面 1 同样
return -1
} else if (val1 > val2) {
return 1
} else {
return 0
}
}
var values = [0, 1, 5, 10, 15]
values.sort(compare)
concat(...)
方法可以在原有基础上创建新数组对象:
var colors = ["red", "blue", "green"]
var colors2 = colors.concat("yellow", ["black", "brown"])
slice(startIndex, endIndex)
方法可以根据区间创建新数组对象,第二个参数默认为数组结尾。slice
允许负数下标,会在负数的基础上自动加上数组长度。
splice(startIndex, length, element1, element2, ...)
方法会从 startIndex 开始删除 length 个元素,然后在 startIndex 开始添加 element1、element2、... 。
支持 indexOf
和 lastIndexOf
方法,且运用到的是全等运算符。
Array 对象的迭代方法有:
every
可以对每个元素进行检查,均满足则返回true
some
有一个元素满足,则返回true
filter
forEach
map
迭代方法的函数参数可以接受三个参数:
value 当前值
index 当前值所对应的下标
array 数组本身
归并可以用 reduce
或 reduceRight
方法,他的函数参数可以接受四个参数:
preValue 前一个值
curValue 当前值
index 当前值所对应的下标
array 数组本身
Date
获取当前日期:
var date = new Date()
Date 的默认时间为 UTC Mon 1 1970 00:00:00
。
Date.parse()
支持以下格式:
"月/日/年"
"月名 日,年"
"星期 月名 日 年 时:分:秒 时区"
名称需为英文,第三种格式中一些参数为可选
Date.UTC()
的参数:
year
month 从
0
开始,比如三月是2
day
hour
minute
second
millsecond
Date.UTC()
的参数和 Date 构造函数一样,但是构造函数会用本地时区。
用 Date.now()
获取时间戳。
Date 的 valueOf
方法会返回日期的毫秒数。
toDateString
和 toTimeString
分别返回日期和时间的字符形式。
可以用 setter/getter 方法获取某一时间信息,比如 getYear()
,见书上 P102 。
RegExp
正则构造:
var expression = /pattren/flags
// 字符串需要注意转义
var expression = new RegExp("pattern", "flags")
可以用 test()
来检查是否匹配,或者 exec()
获得匹配信息。
具体用法请见书上 P103 。
Function
函数声明是全局有效的,可以在调用之后进行声明。
函数有两个属性:
arguments
参数数组this
函数所在的环境对象
可以用 arguments.callee
方法来调用原函数,实现函数名解耦。
可以用函数的 caller
属性来获得调用者的引用,或者用 arguments.callee.caller
。不能给 caller
属性赋值。
用 length
属性获得函数希望接收的参数个数。
prototype
包含了所有的实例方法。
用 apply(obj, args)
来在 obj 下调用函数,或者 call(obj, arg1, arg2, ...)
。
用 bind(obj)
将函数和 obj 绑定。
基本包装类型
基本类型无法保存属性,但可以访问其对应的包装类型的属性及方法。
非必要的时候尽量不要用包装类型。
Object 构造函数会根据参数的类型返回对应的包装类型实例:
var obj = new Object("some text")
alert(obj instanceof String) // true
转型函数返回的是基本类型,不是对象。
Boolean
Boolean 对象返回 true
,而非其值。
Number
可以用 toFixed(length)
设置保留小数位数,但要注意不一定是四舍五入。
toExponential(length)
用科学计数表示。
toPrecision(length)
可设置精度。
String
可以用 charAt(index)
根据索引获得字符,或者 charCodeAt(index)
获得字符对应的编码。
可以用 concat(str1, str2, ...)
连接字符串。
可以用这些方法获得子串:
slice(startIndex, endIndex)
substring(startIndex, endIndex)
substr(startIndex, length)
支持 indexOf
和 lastIndexOf
方法。
支持 trim
方法。
支持 toLowerCase
和 toUpperCase
方法。
支持 match(pattern)
匹配方法,与 RegExp 的 exec
方法一致。
支持 search(pattern)
查找字符所在的第一个位置,没找到返回 -1
。
支持 replace(str/pattern, str/function)
。如果是 str 则只能替换第一个。具体见书本 P127-128 。
支持 split(sign, num)
分割方法,其中 num 为返回的数组大小。
单体内置对象
Global
可以用 eval("statements")
来执行语句:
eval("function sayHi() { alert('HI') }")
sayHi()
禁止给 undefined
、NaN
、Infinity
赋值,他们都是 Global 对象的属性。
在 Web 浏览器中,全局对象为 window
。
Math
Math 有许多可以用的特殊值,比如 E
、PI
等。
支持 min(n1, n2, ...)
和 max(n1, n2, ...)
。
可以使用 Math.min.apply(Math, values)
来获取数组中的最小值。
支持 ceil
、round
、floor
三种舍入方式。
支持 random
方法,他返回一个介于 0
到 1
的随机数:
// 返回一个 1 到 10 的随机数
var num = Math.floor(Math.random() * 10 + 1)
也可以用 selectFrom(start, end)
方法来获取 [start, end]
中的随机数。
Math 支持 abs
、exp
、log
、pow
、sqrt
及三角函数等。