引用类型(对象)是某个特定引用类型的实例,是把数据和功能组织到一起的结构
Date
Date类型可以精确表示1970.1.1前后285616年的日期,接受数值毫秒为参数
console.log(new Date(0)) // Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
console.log(new Date(-1)) // Thu Jan 01 1970 07:59:59 GMT+0800 (中国标准时间)
console.log(new Date(1000)) // Thu Jan 01 1970 08:00:01 GMT+0800 (中国标准时间)
toLocaleString()
返回与浏览器运行的本地环境一致的日期和时间
toString()
返回带有时区信息的日期和时间
valueOf()
不返回字符串,返回日期的毫秒表示
Date - JavaScript | MDN (mozilla.org)
RegExp
字面量形式
let regex = /pattern/flags;
构造函数形式
let regex = new RegExp(pattern, flags);
匹配模式
- "g":全局匹配模式。当该标志被设置时,将会尝试找出所有匹配项,而不仅仅是第一个匹配项。
- "i":忽略大小写模式。当该标志被设置时,将会忽略模式和目标字符串的大小写差异。
- "m":多行匹配模式。当该标志被设置时,^ 和 $ 锚点元字符会匹配目标字符串中每一行的开头和结尾,而不仅仅是整个字符串的开头和结尾。
- "s":单行匹配模式。当该标志被设置时,. 元字符将会匹配包括换行符在内的任意字符。
- "u":Unicode 匹配模式。该标志启用了完整的 Unicode 匹配支持。
- "y":粘附匹配模式。当该标志被设置时,匹配从上次结束的位置开始,而不是整个字符串的开头。
toLocaleString()
返回正则表达式的字面量表示
toString()
返回正则表达式的字面量表示
RegExp(正则表达式) - JavaScript | MDN (mozilla.org)
原始值包装类型
包装类型是对象
根据对原始数据类型的定义,原始数据类型是没有属性和方法的,但是我们在实践中发现它们也有属性和方法,这其实是后台自动通过包装类型完成的。
Boolean
valueOf()
返回原始值数据
toString()
返回字符串形式布尔值
Number
valueOf()
返回原始值数据
toLocaleString()
返回字符串
toString()
接受一个可选参数,返回对应形式的数值字符串(不带进制符号)
toFixed()
返回指定小数点位数的数值字符串,超出四舍五入
toExponential()
返回科学计数法形式的数值字符串,可选小数点位数
toPrecision()
可选参数,指定总位数,根据总位数选择合适的字符串格式输出
String
码元
字符由16位码元组成,length属性表示字符串包含多少16位码元
编码
字符串使用两种编码混合的策略
UCS-2
UCS-2 编码是一种定长的编码方式,每个字符占据 16 位,即两个字节,对于 BMP 字符,它们的编码和 UTF-16 是一样的,但是对于非 BMP 字符,UCS-2 不能正确表示。
UTF-16
编码则是一种变长的编码方式,对于 BMP 字符,编码方式和 UCS-2 完全一样,即使用 16 位(两个字节)进行编码,而对于非 BMP 字符,则使用 surrogate pair 对其进行编码,即使用两个 16 位的码元(代理对)表示一个字符。
valueOf()
返回原始字符串
toLocaleString()
返回原始字符串
toString()
返回原始字符串
length
字符串包含多少16位码元
charCodeAt()
返回指定位置对应的基本多语言平面的编码
charAt()
返回指定位置对应的基本多语言平面的字符
codePointAt()
返回指定位置对应的增补平面的编码,自动识别代理对
.fromCharCode()
根据基本多语言平面的编码,返回基本多语言平面的字符
.fromCodePoint()
根据增补平面的编码,返回增补平面的字符,增补平面的编码包含基本多语言平面的编码
normalize()
某些Unicode字符可以有很多种编码方式,有的字符可以通过BMP表示,也可以通过代理对表示。在对这样的字符进行运算时,由于编码方式的不同会产生不同效果,通过normalize可以解决这样的差异。
"NFD"、"NFC"、"NFKD"、"NFCK",用于指定normalize的规范化形式
indexOf()
从字符串头查找字符,找到返回下标,否则返回-1,第二个参数指定开始下标
lastIndexOf()
从字符串尾查找字符,找到返回下标,否则返回-1,第二个参数指定开始下标
startsWith()
字符串开始是否等于参数1,参数2指定起始下标
endsWith()
字符串结束是否等于参数1,参数2指定起始下标
includes()
字符串是否包含参数1,参数2指定起始下标
trim()
创建副本删除前后空格
trimLeft()
创建副本删除前空格
trimRight()
创建副本删除后空格
padStart()、padEnd()
复制字符串,长度为参数1,用参数2在字符串的前后去填充,默认为空格
字符串迭代与解构
字符串的原型上暴露了一个Symbol.iterator方法,返回字符串的迭代器。
大小写转换
toUpperCase()
转大写
toLocaleupperCase()
根据特定地区的规则进行大写转换
toLowerCase()
转小写
toLocaleLowerCase()
根据特定地区的规则进行小写转换
模式匹配
match
本质上跟RegExp对象的exec方法相同。match方法接收的第一个参数,可以是一个正则表达式字符串,也可以是一个RegExp对象
返回的数组与RegExp对象的exec方法返回的数值也是一样的,第一个元素是整个模式匹配的字符串,其余元素则是与表达式中的捕获组匹配的字符串(如果有的话)
search
接收的参数与match方法一样
返回模式第一个匹配的位置索引,如果没找到反馈-1,需要注意的是search始终从字符串开头向后匹配模式
replace
接收两个参数,第一个参数可以是RegExp对象或一个字符串,第二个参数可以是一个字符串或函数,需要注意的是只会替换第一个子字符串,如果需要替换所有子字符串,第一个参数必须为正则表达式并且携带全局标记
当第二个参数为字符串时,有几个特殊的字符序列,可以用来插入正则表达式操作的值
字符序列 | 替换文本 |
---|---|
$$ | $ |
$& | 匹配整个模式的子字符串。与RegExp.lastMatch相同 |
$' | 匹配的子字符串之前的字符串。与RegExp.rightContext相同 |
$` | 匹配的子字符串之后的字符串。与RegExp.leftContext相同 |
$n | 匹配第n个捕获组的字符串,如果没有捕获组,则该值为空字符串 |
当第二个参数为函数时,有匹配成功时该函数会被调用,该函数会接收三个参数,第一个是匹配的字符串,第二个是匹配的位置,第三个是整个字符串
split
根据传入的字符串或RegExp对象将字符串拆分为数组。还可以传入第二个参数,即返回的数组大小
localeCompare
用于比较两个字符串
按照字母表顺序,字符串在参数字符串前面,返回负值(通常为-1)
字符串与参数字符串相同,返回0
按照字母表顺序,字符串在参数字符串后面,返回正值(通常为1)
独特之处在于,所在地区(国家和语言)决定了这个方法如何比较字符串
单例内置对象
ECMA-262对内置对象的定义是“任何由ECMAScript实现提供、与宿主环境无关,并在ECMAScript程序开始执行时就存在的对象”,这就意味着,开发者不用显示地实例化内置对象,因为它们已经实例化好了。Object、Array、String也属于单例对象。
Global
Global对象是ECMAScript中最特别的对象,因为代码不会显示地访问它。ECMA-262规定global对象作为一种兜底对象,它所针对的是不属于任何对象的属性和方法。事实上,不存在全局变量或全局函数这种东西。在全局作用域中定义的变量和函数都会变成Global对象的属性
URL编码方法
encodeURI
只会对主机的路径中的特殊部分(冒号、斜杠、问号、井号)进行编码
encodeURIComponent
对整个URL中的特殊部分(冒号、斜杠、问号、井号)进行编码
URL解码方法
decodeURI
只会对主机的路径中的特殊部分(冒号、斜杠、问号、井号)进行解码
decodeURIComponent
对整个URL中的特殊部分(冒号、斜杠、问号、井号)进行解码
eval
接收一个参数,即一个要执行的字符串。需要注意的是在执行时,字符串会被放到块语句中执行
eval("console.log('123')")等价于{console.log('123')}
window
虽然ECMA-262没有规定直接访问Global对象的方式,但浏览器将window对象实现为Global对象的代理
Math
Math对象上的计算要比直接在JavaScript实现要快得多,因为Math对象上的计算使用了JavaScript引擎中更高效的实现和处理器指令,但使用Math计算的问题是精度会因浏览器、操作系统、指令集和硬件而异
属性
E
自然对数的基数e的值
LN10
10为底的自然对数
LN2
2为底的自然对数
LOG2E
以2为底e的对数
LOG10E
以10为底e的对数
PI
Π的值
SQRT1_2
1/2的平方根
SQRT2
2的平方根
方法
min
返回给定参数的最小值
max
返回给定参数的最大值
ceil
向上取整
floor
向下取整
round
四舍五入
fround
返回数值最接近的单精度(32位)浮点值表示
random
返回0-1之间的随机数,需要注意的是包含0不包含1
如果是为了加密而需要生成随机数,那么建议使用window.crypto.getRandomValues()