引用类型
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可以对每个元素进行检查,均满足则返回truesome有一个元素满足,则返回truefilterforEachmap
迭代方法的函数参数可以接受三个参数:
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开始,比如三月是2day
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 及三角函数等。