本文内容
本文记录 JavaScript 中一些数据处理的 API
数组
数组可以通过字面量与 new 表达式两种方法生成。我们可以将任意的值或者对象的引用指定为元素,并且不需要确保数组中元素类型的一致性。
在书写数组字面量时,还可以省略一些中间的元素。被省略元素的值将被认为是 undefined 值。例如
var arr = [3,,5]; console.log(arr[0]); console.log(arr[1]); console.log(arr[2]);输出如下:
(py3.5) czp@:~/workspace/knowledge-base/demos/node_start$ node hello.js 3 undefined 5ES 标准中,我们可以在数组最后面加上逗号,那个逗号会被忽略。但是在老版本的 js 和 JSON 的数组中,这个会出现问题。(所以能不加还是别加了)
如果在赋值表达式左侧所写的下标超过了元素数量,则会向数组增加新的元素。新增的元素下标值 不必紧接着现有元素的个数。这时,如果访问中间被跳过的元素,则会返回 undefined 值。
var arr = [3,4,5]; arr[10] = 7; console.log(arr.length); console.log(arr);输出如下:
(py3.5) czp@:~/workspace/knowledge-base/demos/node_start$ node hello.js 11 [ 3, 4, 5, <7 empty items>, 7 ]可以显式地更改 length 的值,在进行改写之后数组的长度也会相应发生改变。如果该值变小,超出部分的元素将被舍去。如果该值变大,新增部分的元素将是 undefined 值
数组 API
Array 类的属性
| 属性名 | 说明 |
|---|---|
| prototype | 用于原型链 |
| length | 值为 1 |
| isArray(arg) | 如果参数 arg 是一个数组实例则返回真 |
Array.prototype 对象的属性
| 属性名 | 说明 |
|---|---|
| constructor | 对 Array 类对象的一个引用 |
| concat([item0, item1, … ]) | 把参数作为元素加入某一数组并生成新的数组。如果参数本身就是一个数组,则 将这两个数组连接 |
| every(callbackfn[, thisArg]) | 依次对数组中的各个元素应用 callbackfn 函数。在 callbackfn 返回 false 之后终止 |
| filter(callbackfn[, thisArg]) | 依次对数组中的各个元素应用 callbackfn 函数,并返回函数的返回值为 true 的元 素所组成的新的数组 |
| forEach(callbackfn[, thisArg]) | 依次对数组中的各个元素应用 callbackfn 函数 |
| indexOf(searchElement, [fromIndex]) | 返回第一个与 searchElement 一致的元素的下标。也可以通过第 2 参数来设置检 索的起始下标。如果没有找到相符的结果,则返回 -1 |
| join(separator) | 在数组的元素之间加入分隔符之后生成相应的字符串值 |
| lastIndexOf(searchElement[, fromIndex]) | 从后向前检索,返回第一个与 searchElement 一致的元素的下标。也可以通过第 2 参数来设置检索的起始下标。如果没有找到相符的结果,则返回 -1 |
| map(callbackfn[, thisArg]) | 依次对数组中的各个元素应用 callbackfn 函数,返回元素为函数结果的新的数组 |
| pop() | 删除数组中最后一个元素后返回该数组 |
| push([item0, item1, …]) | 将参数添加至数组的末尾 |
| reduce(callbackfn[, initialValue]) | 将数组的各个元素与之前的函数调用结果作为参数,依次应用 callbackfn 函数, 并返回函数调用的最终结果 |
| reduceRight(callbackfn[, initialValue]) | 从数组的末尾开始向前执行 reduce 操作 |
| reverse() | 将数组中的元素逆序置换 |
| shift() | 删除数组中的第一个元素后返回该数组 |
| slice(start, end) | 生成一个下标由 start 起至 end 的元素所组成的新的数组 |
| some(callbackfn[, thisArg]) | 依次对数组中的各个元素应用 callbackfn 函数。如果 callbackfn 的结果为 true,则 终止 |
| sort(comparefn) | 将数组中的元素排序 |
| splice(start, delCount, [item0, item1, …]) | 删除下标由 start 开始的 delCount 个元素。如果指定了第 3 个参数,则将该参数 插入至前述位置 |
| toLocaleString() | 将数列转换为与地区相关的字符串值类型 |
| toSource() | JavaScript 自定义的增强功能。求值结果将返回用于函数进行生成的字符串。 |
| toString() | 将数组转换为字符串值类型 |
| unshift([item0, item1, …]) | 将元素添加至数组的头部 |
JSON
JSON 能够通过 4 种基本数据类型以及 2 种结构化数据类型来表示。
4 种基本数据类型是指字符串值型、数值型、布尔型以及 null 型。结构化数据类型是指对象与数组这两种。
注意:JSON 标准中,对象的属性名必须具有双引号
JSON 的标准
| 数据类型 书写示例 注意点 | ||
|---|---|---|
| 字符串值 | "foobar" | 不能使用单引号。字符串的默认编码为 UTF-8 |
| 数值 | 123.4 | 只支持 10 进制书写方式 |
| 布尔值 | true 或是 false | |
| null 值 | null | |
| 对象 | { "x":1, "v":"foo" } | 属性名只能使用字符串的方式表示而不能使用 {x:1} 这样的字面量形式 |
| 数组 | { 1, 2, "foo" } | 数组中的元素可以被指定为任意类型的值 |
JSON 对象
JSON 对象是一种用于原生 JSON 分析的对象,无法对其进行构造函数调用。如果用 Java 中的术语来说,它相当于能够直接使用类方法的工具类。也就是说 JSON 本身就是 JavaScript 中提供的一个内置对象,这个对象提供了一些 JSON 相关的 API。
JSON 对象的属性
| 属性名 | 说明 |
|---|---|
| parse(text[, reviver]) | 对参数 text 这一 JSON 字符串进行分析之后返回一个 JavaScript 对象。reviver 将会对每个属性调用回调函数,并将返回值赋为属性值 |
| stringify(value[, replacer[, space]]) | 将参数 value 转换为 JSON 字符串。replacer 将会对每个属性调用回调函数,并 将返回值赋为属性值。space 则是输出时的一个缩进字符串 |
日期处理
Date 类的函数以及构造函数调用
| 函数或是构造函数 | 说明 |
|---|---|
| Date() | 返回当前时刻的字符串 |
| new Date([year[, month[, date[, hours[, minutes[, seconds[, ms]]]]]]]) | 返回参数所指定的时刻的 Date 实例 |
| new Date(value) | 将参数作为 epoch 值并返回相应的 Date 实例 |
| new Date() | 返回当前时刻的 Date 实例 |
需要注意的是,和其他一些程序设计语言一样,在 JavaScript 中,month 也是由 0 开始计数的。也就 是说,一个显示为 2012 年 1 月 1 日的 Date 对象应该以下面这样的方式生成。
var dt = new Date(2012,0,1); // 2012 年 1 月 1 日
console.log(dt.toString());
输出:
(py3.5) czp@:~/workspace/knowledge-base/demos/node_start$ node hello.js
Sun Jan 01 2012 00:00:00 GMT+0800 (中国标准时间)
注:这里的时间都是代表着客户端的本地时间
也就是说同样一串代码
var dt = new Date(2012,0,1);,在中国执行,和在美国执行,实际上这两个 date 对象底层对应的绝对时间(或者说是相对于 0 时区的时间戳秒数),是不一样的
Date.prototype 对象的属性
| 属性名 | 说明 |
|---|---|
| constructor | 指向 Date 类对象的一个引用 |
| getDate() | 返回日期的数值。日期从 1 开始计。基于时间 |
| getDay() | 返回星期几的数值。一个星期从星期日开始计。星期日是 0,星期六是 6。基于 本地时间 |
| getFullYear() | 返回年的数值。基于本地时间 |
| getHours() | 返回小时的数值。小时从 0 开始计。基于本地时间 |
| getMilliseconds() | 返回毫秒的数值。毫秒数从 0 开始计。基于本地时间 |
| getMinutes() | 返回分的数值。分从 0 开始计。基于本地时间 |
| getMonth() | 返回月份的数值。月份从 0 开始计。1 月是 0,12 月是 11。基于本地时间 |
| getSeconds() | 返回秒的数值。秒从 0 开始计。基于本地时间 |
| getTime() | 返回一个数值形式的时间。即取得当前的 epoch 毫秒值 |
| getTimezoneOffset() | 返回时区的偏差量。单位是分钟 |
| getUTCDate() | 返回日期的数值。日期从 1 开始计。基于 UTC 时间 |
| getUTCDay() | 返回星期几的数值。一个星期从星期日开始计。星期日是 0,星期六是 6。基于 UTC 时间 |
| getUTCFullYear() | 返回年的数值。基于 UTC 时间 |
| getUTCHours() | 返回小时的数值。小时从 0 开始计。基于 UTC 时间 |
| getUTCMinutes() | 返回分的数值。分从 0 开始计。基于 UTC 时间 |
| getUTCMonth() | 返回月份的数值。月份从 0 开始计。1 月是 0,12 月是 11。基于 UTC 时间 |
| getUTCSeconds() | 返回秒的数值。秒从 0 开始计。基于 UTC 时间 |
| getUTCMilliseconds() | 返回毫秒的数值。秒从 0 开始计。基于 UTC 时间 |
| setDate(date) | 将日期设定为参数指定的值(1-31)。基于本地时间 |
| setFullYear(year[, month[, date]]) | 将年份设定为参数指定的值。基于本地时间 |
| setHours(hour[, min[, sec[, ms]]]) | 将小时设定为参数指定的值。基于本地时间 |
| setMilliseconds(ms) | 将年毫秒设定为参数指定的值。基于本地时间 |
| setMinutes(min[, sec[, ms]]) | 将分钟设定为参数指定的值。基于本地时间 |
| setMonth(month[, date]) | 将月份设定为参数指定的值(0-11)。基于本地时间 |
| setSeconds(sec[, ms]) | 将秒设定为参数指定的值。基于本地时间 |
| setTime(time) | 将 epoch 毫秒设定为参数指定的值。基于本地时间 |
| setUTCDate(date) | 将日期设定为参数指定的值(1-31)。基于 UTC 时间 |
| setUTCFullYear(year[, month[, date]]) | 将年份设定为参数指定的值。基于 UTC 时间 |
| setUTCHours(hour[, min[, sec[, ms]]]) | 将小时设定为参数指定的值。基于 UTC 时间 |
| setUTCMilliseconds(ms) | 将年毫秒设定为参数指定的值。基于 UTC 时间 |
| setUTCMinutes(min[, sec[, ms]]) | 将分钟设定为参数指定的值。基于 UTC 时间 |
| setUTCMonth(month[, date]) | 将月份设定为参数指定的值(0-11)。基于 UTC 时间 |
| setUTCSeconds(sec[, ms]) | 将秒设定为参数指定的值。基于 UTC 时间 |
| toDateString() | 将 Date 实例的日期转换为字符串值。基于本地时间 |
| toJSON(key) | 将 Date 实例转换为 JSON 格式的字符串值 |
| toISOString() | 将 Date 实例转换为 ISO8601 格式的字符串值 |
| toLocaleDateString() | 将 Date 实例的日期转换为与地区相关的字符串值。基于本地时间 |
| toLocaleFormat(format) | JavaScript 自定义的增强功能。以 format 字符串所指定的格式将日期转换为字符 串。基于本地时间 |
| toLocaleString() | 将 Date 实例转换为地区相关的字符串。基于本地时间 |
| toLocaleTimeString() | 将 Date 实例所表示的时刻转换为地区相关的字符串。基于地区相关时刻 |
| toSource() | JavaScript 自定义的增强功能。返回用于生成 Date 实例的字符串(即源代码) |
| toString() | 将 Date 实例转换为字符串值。基于本地时间 |
| toTimeString() | 将 Date 实例的时刻转换为字符串值。基于本地时间 |
| toUTCString() | 将 Date 实例转换为字符串值。基于 UTC 时间 |
| valueOf() | 将 Date 实例转换为数值。即取得当前的 epoch 毫秒值 |