跳到主要内容

引用类型

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 及三角函数等。