JavaScript高级程序设计第四版--第五章--基本引用类型

69 阅读4分钟

引用类型(对象)是某个特定引用类型的实例,是把数据和功能组织到一起的结构

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);

匹配模式

  1. "g":全局匹配模式。当该标志被设置时,将会尝试找出所有匹配项,而不仅仅是第一个匹配项。
  2. "i":忽略大小写模式。当该标志被设置时,将会忽略模式和目标字符串的大小写差异。
  3. "m":多行匹配模式。当该标志被设置时,^ 和 $ 锚点元字符会匹配目标字符串中每一行的开头和结尾,而不仅仅是整个字符串的开头和结尾。
  4. "s":单行匹配模式。当该标志被设置时,. 元字符将会匹配包括换行符在内的任意字符。
  5. "u":Unicode 匹配模式。该标志启用了完整的 Unicode 匹配支持。
  6. "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()