工具对象
yuhuo2021-06-13JavaScriptJS对象
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 | 设置目标对象的原型对象,返回是否成功 |
