工具对象
yuhuo2021-06-13JavaScriptJavaScript对象
Math 对象
1. 对象属性
属性 | 类型 | 描述 |
---|---|---|
PI | number | 返回圆周率 |
E | number | 返回自然对数 |
SQRT2 | number | 返回根号2 |
SQRT1_2 | number | 返回根号0.5 |
LN2 | number | 返回自然对数 e 为底的 2 的对数 |
LN10 | number | 返回自然对数 e 为底的 10 的对数 |
LOG2E | number | 返回 2 为底的自然对数 e 的对数 |
LOG10E | number | 返回 10 为底的自然对数 e 的对数 |
2. 对象方法
原型方法 | 描述 |
---|---|
ceil(x: number): number | 向上舍入 |
floor(x: number): number | 向下舍入 |
round(x: number): number | 四舍五入 |
abs(x: number): number | 绝对值 |
max(...values: number[]): number | 最大值 |
min(...values: number[]): number | 最小值 |
random(): number | 0~1随机数(不包括1) |
sign(x: number): number | 判断数字符号,正 1,负-1,零 0 |
sin(x: number): number | 正弦(弧长 arc = 角度 * PI / 180) |
cos(x: number): number | 余弦 |
tan(x: number): number | 正切 |
asin(x: number): number | 反正弦 |
acos(x: number): number | 反余弦 |
atan(x: number): number | 反正切 |
sqrt(x: number): number | 平方根 |
cbrt(x: number): number | 立方根 |
hypot(...values: number[]): number | 所有参数的平方和的平方根 |
pow(x: number, y: number): number | x 的 y 次方 |
exp(x: number): number | 自然对数 e 的 x 次方 |
log(x: number): number | 自然对数 e 为底的 x 的对数 |
log10(x: number): number | 10 为底的 x 的对数 |
log2(x: number): number | 2 为底的 x 的对数 |
JSON 对象
1. 对象方法
对象方法 | 描述 |
---|---|
stringify(value[, replacer, space]) | 值转字符串 |
parse(text[, reviver]) | 字符串转值 |
原值 | 转字符串 | |
---|---|---|
1 | '1' | |
"abc" | '"abc"' | |
false | 'false' | |
null ,NaN ,Infinity | 'null' | |
undefined ,new Function() | 单独:undefined ,数组中:'null' ,对象中:移除字段 | |
new Error() ,new RegExp() | '{}' | |
{} | '{}' | |
[] | '[]' |
stringify
- 对象只能转自身可枚举的属性
- 对象存取器属性会变成数据属性
- 如果对象包含
toJSON()
方法,则会以该方法返回值作为stringify
的参数
Date 类
1. 创建对象
// 当前时间
var date = new Date();
// 指定时间戳
var date = new Date(1630401884000);
// 指定时间对象
var date = new Date(new Date());
// 指定时间字符串(日期部分的间隔./-空格都可以,/兼容性高)
var date = new Date("2021/06/12 12:13:14.155");
2. 静态方法
静态方法 | 描述 |
---|---|
parse(s: Date | string): number | 指定时间的毫秒数 |
now(): number | 当前时间的毫秒数 |
3. 原型方法
原型方法 | 描述 |
---|---|
getTime(): number | 返回毫秒数 |
setTime(time: number): number | 设置毫秒数 |
valueOf(): number | 返回毫秒数 |
toString(): string | 返回时间字符串 |
toLocaleString(): string | 返回时间本地字符串 |
getFullYear(): number | 返回年份 |
setFullYear(year: number, month?: number, date?: number): number | 设置年份,返回毫秒数 |
getMonth(): number | 返回月份(0~11) |
setMonth(month: number, date?: number): number | 设置月份,返回毫秒数 |
getDate(): number | 返回日期 |
setDate(date: number): number | 设置日期,返回毫秒数 |
getDay(): number | 返回星期(0~6) |
getHours(): number | 返回小时 |
setHours(hours: number, min?: number, sec?: number, ms?: number): number | 设置小时,返回毫秒数 |
getMinutes(): number | 返回分钟 |
setMinutes(min: number, sec?: number, ms?: number): number | 设置分钟,返回毫秒数 |
getSeconds(): number | 返回秒 |
setSeconds(sec: number, ms?: number): number | 设置秒,返回毫秒数 |
getMilliseconds(): number | 返回毫秒 |
setMilliseconds(ms: number): number | 设置毫秒,返回毫秒数 |
备注
- UTC 时间:在 get 和 set 后插入UTC,如
getUTCFullYear()
- 毫秒数:从1970年开始计起毫秒数
RegExp 类
1. 创建对象
var regex = new RegExp("abc", "i");
// 字面量方式,更加高效便利直观
var regex = /abc/i;
2. 原型属性
原型属性 | 类型 | 描述 |
---|---|---|
lastIndex | number | 下一次开始搜索的位置 |
source | string | 查看正则表达式字符串形式(只读) 如 /abc/g.source → "abc" |
global | boolean | 是否设置了 g 修饰符 (只读) |
ignoreCase | boolean | 是否设置了 i 修饰符 (只读) |
multiline | boolean | 是否设置了 m 修饰符(只读) |
flags | string | 已设置的所有修饰符,按字母排序(只读) 如 /abc/img.flags → "gim" |
lastIndex
- lastIndex 只有与 g 修饰符结合使用时才有意义。
- 执行多次 test 或 exec 时,lastIndex 会自动设为上一次匹配的后一个位置,也可手动修改 lastIndex 的值。
3. 原型方法
原型方法 | 描述 |
---|---|
test(string: string): boolean | 检测字符串是否匹配 |
exec(string: string): RegExpExecArray | 返回匹配结果,格式如下: [第N匹配结果, 第一括号, 第二括号..., index: 匹配序号, input: 输入文本] |
4. 字符匹配
(1)基本
/abc/
包含 abc/[^a]bc/
取反, 包含 不是a + bc/(good|nice)/
分支,包含 good 或者 nice/abc/g
全局匹配,默认匹配第一个/abc/i
忽略大小写/abc/m
影响 ^ 和 $,使其变成行头行尾
(2)量词
{m,n}
m ~ n 个{m,}
至少 m 个(注意没有{,n}
){m}
={m,m}
m 个?
={0,1}
至多1个+
={1,}
至少1个*
={0,}
任意个{m,n}?
,??
,+?
,*?
加 ?,惰性匹配,当最少数量匹配时即按最少的(默认是贪婪匹配)
(3)字符组
/a[123]b/
包含 a + (123任一值) + c/[1-9a-zA-Z]/
包含(1~9 或 a~z 或 A~Z 任一值)/[-az][az-][a\-z]/
包含(-az 任一值),不写成 a-z\d
=[0-9]
数字\D
=[^0-9]
非数字\w
=[0-9a-zA-Z_]
单词(数字字母下划线)\W
=[^0-9a-zA-Z_]
非单词\s
=[\t\v\n\r\f]
空白符(空格/水平制表/垂直制表/换行/回车/换页)\S
=[^\t\v\n\r\f]
非空白符.
= 通配符,除了换行符/回车符/行分隔符/段分隔符[\d\D]
=[\w\W]
=[\s\S]
=[^]
所有字符
(4)匹配特殊字符,加 \
- 正斜杠
\/
- 反斜杠
\\
- 点号
\.
- 星号
\*
5. 位置匹配
^
匹配开头$
匹配结尾\b
单词边界\B
非单词边界(?=p)
p 前面的位置- 示例:
"hello".replace(/(?=l)/g, '#')
→"he#l#lo"
- 示例:
(?!p)
非 p 前面的位置- 示例:
"hello".replace(/(?!l)/g, '#')
→"#h#ell#o#"
- 示例:
6. 括号
- 分组
- 示例:
/(ab){2}/.test("ababc")
→true
- 示例:
- 分支
- 示例:
/(good|nice)/
匹配包含 good 或者 nice
- 示例:
- 正向引用
- 示例1:
/(\d{4})-(\d{2})-(\d{2})/.exec("2017-06-12")
→["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]
- 示例2:
"2017-06-12".match(/(\d{4})-(\d{2})-(\d{2})/)
→ 同上 - 示例3:
RegExp.$1
至RegExp.$9
,提取最近一次正则操作的第1~9个括号的数据(正则操作包括 RegExp 的 test / exec 方法,String 的 match / search / replace / split 方法) - 示例4:
"2017-06-12".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1")
→ `"06/12/2017"
- 示例1:
- 反向引用
- 示例:
var regex = /\d{4}(-|\/)\d{2}\1\d{2}/
,\N
表示匹配与第N个括号相同的字符,即:regex.test("2017-06-12")
→true
,regex.test("2017/06/12")
→true
,regex.test("2017-06/12")
→false
。当括号嵌套时以左括号为准开始算,没有对应括号时则匹配\N
字符本身
- 示例:
- 非捕获分组
(?:p)
,正向引用和反向引用都不起作用- 示例:
/(?:\d{4})-(?:\d{2})/.exec("Time:2017-06")
→["2017-06", index: 5, input: "Time:2017-06"]
- 示例:
7. 优先级
(从上至下,由高到低)
- 转义符
\
- 括号和方括号
(...)
、(?:...)
、(?=...)
、(?!...)
、[...]
- 量词
{m}
、{m,n}
、{m,}
、?
、*
、+
- 位置和序列
^
、$
、\元字符
、一般字符
- 管道符
|
URL 类
1. 创建对象
// new URL(url [, base])
// 绝对路径
var url1 = new URL("https://baidu.com/a/b");
// 相对路径
var url2 = new URL("b", "https://baidu.com/a/");
var url3 = new URL("/a/b", new URL("https://baidu.com/c/d"));
// 以上方式生成的url都是 https://baidu.com/a/b
2. 静态方法
静态方法 | 描述 |
---|---|
createObjectURL(obj: MediaSource | Blob): string | 创建对象链接(链接协议为 blob:) |
revokeObjectURL(url: string): void | 销毁对象链接 |
3. 原型属性
原型属性 | 类型 | 描述 |
---|---|---|
href | string | 完整 URL(http://username:password@127.0.0.1:5502/WebNote/demo.html?search=a#hash) |
origin | string | 协议 + 主机名 + 端口(http://127.0.0.1:5502) |
protocol | string | 协议(http:) |
username | string | 主机名前的用户名(username) |
password | string | 主机名前的密码(password) |
host | string | 主机名 + 端口(127.0.0.1:5502) |
hostname | string | 主机名(127.0.0.1) |
port | string | 端口(5502) |
pathname | string | 路径(/WebNote/demo.html) |
search | string | 查询(?search=key) |
hash | string | 锚(#hash) |
searchParams | URLSearchParams | 返回查询参数对象 |
4. 原型方法
原型属性 | 描述 |
---|---|
toString(): string | 返回完整 URL |
toJSON(): string | 返回完整 URL |
URLSearchParams 类
1. 创建对象
// 来自URL对象
var url = new URL("https://baidu.com/a/b");
var params1 = url.searchParams;
// 构造函数
var params2 = new URLSearchParams("?foo=1&bar=2"); // 带不带?都可以
var params3 = new URLSearchParams([["foo", 1],["bar", 2]]);
var params4 = new URLSearchParams({ foo: 1, bar: 2 });
2. 原型方法
原型方法 | 描述 |
---|---|
append(name: string, value: string): void | 追加一个指定的键值对 |
delete(name: string): void | 根据键删除键值对 |
sort(): void | 按键名排序 |
set(name: string, value: string): void | 设置键值对(该键原本的单/多个值将被删除) |
get(name: string): string | 返回指定键的值 |
has(name: string): boolean | 返回是否存在指定键名 |
getAll(name: string): string[] | 返回所有值的数组 |
keys(): IterableIterator | 返回键名的迭代器对象 |
values(): IterableIterator | 返回值的迭代器对象 |
entries(): IterableIterator | 返回键值数组的迭代器对象 |
toString(): string | 返回键值字符串(不带?) |
Reflect 对象
1. 静态方法
静态方法 | 描述 |
---|---|
apply(target: Function, thisArg: any, argArray: any[]): any | 指定方法的 this 对象运行方法 |
construct(target: Function, argArray: any[], newTarget?: Function): any | 方法作为构造方法 |
defineProperty(target: Object, key: string | symbol, attributes: PropertyDescriptor): boolean | 目标对象定义或修改属性描述对象,返回是否成功 |
getOwnPropertyDescriptor(target: Object, key: string | symbol): PropertyDescriptor | 返回目标对象指定自有属性的描述对象 |
set(target: object, propertyKey: string | symbol, value: any, thisArg?: any): boolean | 目标对象定义或修改自有属性值,返回是否成功 |
get(target: Object, key: string | symbol, thisArg?: any): any | 返回目标对象指定自有属性的值 |
deleteProperty(target: Object, key: string | symbol): boolean | 删除自有属性,返回是否成功 |
has(target: object, key: string | symbol): boolean | 返回属性是否存在 |
ownKeys(target: object): (string | symbol)[] | 返回目标对象所有的自有属性名称的数组 |
isExtensible(target: object): boolean | 返回目标对象是否可拓展 |
preventExtensions(target: object): boolean | 设置目标对象为不可扩展,返回成功 |
getPrototypeOf(target: object): object | 返回目标对象的原型对象 |
setPrototypeOf(target: object, proto: object): boolean | 设置目标对象的原型对象,返回是否成功 |