JavaScript高级程序设计4 第五章 基本引用类型
引用值(或对象)是某个特定引用类型的实例。
对象被认为是某个特定引用类型的实例。新对象通过new操作符后跟一个构造函数来创建。
Date
Date.parse()方法接受一个表示日期的字符串参数,尝试将这个字符串转换为表示改日期的毫秒数。传给Date.parse()的字符串并不表示日期,则返回NaN。直接把表示日期的字符串传给Date构造函数,那么Date会在后台调用Date.parse()
日期时间组件方法
方法 | 说明 |
---|---|
getTime() | 返回日期的毫秒表示 |
getFullYear() | 返回4位数年(如2022) |
getMonth() | 返回日期的月(0表示1月,11表示12月) |
getDate() | 返回日期的日(1—31) |
getDay() | 返回日期中表示周几的数值( 0 表示周日, 6 表示周六) |
getHours() | 返回日期中的时(0—23) |
getMinutes() | 返回日期中的分( 0~59) |
getSeconds() | 返回日期中的秒( 0~59) |
RegExp
- g:全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就会结束
- i:不区分大小写
- m:多行模式,表示查找到一行文本末尾时会继续查找
- y:粘附模式,表示只查找从lastIndex开始及之后的字符串。
- u:Unicode模式,启用Unicode匹配
- s:dotAll模式,表示元字符,匹配任何字符(包括\n或\r)
正则表达式可以使用RegExp构造函数来创建,它接收两个参数:模式字符串和可选的标记字符串。
可以使用RegExp基于已有的正则表达式实例修改他们的标记。
RegExp实例方法
RegExp实例的主要方法是exec(),主要用于匹配捕获组使用。这个方法只接收一个参数,即要应用模式的字符串。如果找到了匹配项,则返回包含第一个匹配信息的数组;如果没有找到匹配项,则返回null
如果模式设置了全局标记,则每次调用exec()方法会返回一个匹配的信息。如果没有设置全局标记,则无论对同一个字符串调用多少次exec(),都只会返回第一个匹配信息。
如果模式设置了粘附标记y,则每次调用exec()就只会在lastIndex的位置上寻找匹配项。粘附标记覆盖全局标记。
test(),接收一个字符串参数。如果输入的文本与模式匹配,则参数返回true,否则返回false
RegExp构造函数的属性
全名 | 简写 | 说明 |
---|---|---|
input | $_ | 最后搜索的字符串 |
lastMathch | $& | 最后匹配的文本 |
lastParen | $+ | 最后匹配的捕获组 |
leftContext | $` | input 字符串中出现在 lastMatch 前面的文本 |
rightContext | $' | input 字符串中出现在 lastMatch 后面的文本 |
原始值包装类型
在原始值包装类型的实例上调用typeof会返回‘object’,所有原始值包装对象都会转为转换为布尔值 true。
Object构造函数作为一个工厂方法,能够根据传入值的类型返回原值包装类型的实例
Number()
-
toString()方法可选地接收一个表示基数 的参数,并返回相应基数形式的数值字符串。
-
toFixed()方法返回包含指定小数点位数的数值字符串。
-
原始数值在调用typeof时返回‘number’,而Number对象则返回‘object’。
-
Number.isInteger()方法,用于辨别一个数值是否保存为整数
String()
- 每个String对象都有一个length属性,表示字符串中字符的数量
- charAt()方法返回给定索引位置的字符
- concat(),用于将一个或多个字符串拼接成一个新字符串,可以接收多个参数
- slice(),substr()和substring()。这3个方法都返回调用他们的字符串的一个子字符串,而且都接收一或两个参数,第一个参数表示子字符串开始的位置,第二个参数表示子字符串结束。对slice()和substring()而言,第二个参数是提取结束的位置(即该位置之前的字符会被提取出来)。对substr()而言,第二个参数表示返回子字符串的字符数量。任何情况下,省略第二个参数都意味着提取到字符串末尾。都不会修改调用他们的字符串,只会返回提取到的新字符串值。
- slice()方法将所有负值参数都当成字符串长度加上负参数值。
- substr()方法将第一个负参数值当成字符串长度加上该值,将第二个负参数值转换为0.
- substring()方法将所有负参数值都转换为0
- indexOf()和lastIndexOf()这两个方法从字符串中搜索传入的字符串,并返回位置(如果没找到返回-1),这两个方法都可以接收可选的第二个参数,表示开始搜索的位置。
- 判断字符串中是否包含另一字符串的方法:startsWith()、endsWith()和includes(),返回表示是否包含的布尔值,startsWith()和includes()方法接收可选的第二个参数,表示开始搜索的位置。endsWith()方法接收可选的第二个参数,表示应该当做字符串末尾的位置,如果不提供这个参数,那么默认就是字符串长度,如果提供这个参数,那么就好像字符串只有那么多字符一样。
- trim()创建字符串一个副本,删除前、后所有空格符,在返回结果,trim()返回的是字符串的副本,因此原始字符串不受影响。
- repeat()方法。这个方法接收一个整数参数,表示要将字符串复制多少次,然后返回拼接所有副本后的结果
- padStart()和padEnd()方法会复制字符串,如果小于指定长度,则在相应一边填充字符,直至满足长度条件。这两个方法的第一个参数是长度,第二个参数是可选的填充字符串,默认为空格。
- tolowerCase()和toLocaleLowerCase()都将字符串转为小写字符,如果不知道代码涉及什么语言,则最好使用地区特定的转换方法。
- 字符串模式匹配方法:
- match()方法接收一个参数,可以是一个正则表达式字符串,也可以是RegExp对象。match()方法返回的数组与RegExp对象的exec()方法返回的数组是一样的:第一个元素是与整个模式匹配的字符串,其余元素则是与表达式中的捕获组匹配的字符串。
- replace()方法接收两个参数,第一个参数可以是RegExp对象或一个字符串(这个字符串不会转换为正则表达式),第二个参数可以是一个字符串或一个函数。如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,第一个参数必须为正则表达式并且带全局标记。
- split()这个方法会根据传入的分隔符将字符串拆分成数组
单例内置对象
- 通过eval()执行的代码属于该调用所在上下文,被执行的代码与该上下文拥有相同的作用域链。通过eval()定义的任何变量和函数都不会被提升,这是因为在解析代码的时候,它们是被包含在一个字符串中的。它们只是在eval()执行的时候才会被创建。在严格模式下,在eval()内部创建的变量和函数无法被外部访问。
- 浏览器将window对象实现为Global对象的代理。因此所有全局作用域中声明的变量和函数都变成了window的属性。
Math
Math对象有一些属性,主要用于保存数学中的一些特殊值。
- Math.ceil()方法始终向上舍入为最接近的整数
- Math.floor()方法始终向下舍入为最接近的整数
- Math.round()方法执行四舍五入
- Math.fround()方法返回数值最接近的单精度浮点值表示。
- Math.random()方法返回一个0-1范围内的随机数,其中包含0但不包含1