引用值(或对象)是某个特定引用类型的实例
引用类型虽然有点像类,但是却和类不是一个概念
对象被认为是某个特定引用类型的实例,通过构造函数来创建
函数也是一种引用类型,在第十章会专门讲述
5.1 Date
起始时间:1970/1/1/00:00:00
Date.parse() 初始化时间
"月/日/年" "5/23/2003"
"月名 日,年" "May 2/2001"
"周几 月名 日 年 时:分:秒 时区" "Tue May 23 2019 00:00:00 FGMT-0700"
Date.UTC() 返回当前时间经过的毫秒数(跟起始时间比)
"年 月 日 时 分 秒" 只有年和月是必须的
※月的起始值是0,代表1月
5.1.1 继承的方法
Date型重写了
toLoacaleString() - 2/1/2019 20:00:00 AM
toString() - Thu Feb 2 2019 00:00:00 GMT-0800 (Pacific Standard Time)
valueOf() 直接用< > 比较UTC返回的毫秒数
5.1.2 日期格式化方法
let date = new Date()
console.log(date.toDateString());
console.log(date.toTimeString());
console.log(date.toLocaleDateString());
console.log(date.toLocaleTimeString());
console.log(date.toUTCString());
5.1.3 日期/时间组件方法
请查阅MDN文档
Date - JavaScript | MDN (mozilla.org)
5.2 RegExp
ECMAScript通过RegExp支持正则表达式
创建语法:
let expamle = /pattern/flags
pattern可以是任何正则表达式
flags的取值:
g:全局模式,查找所有符合条件的内容
i:不区分大小写
m:多行模式,在遇到换行时会继续
y:粘附模式,只查找lastIndex之后的内容
u:启用Unicode匹配
s:dotAll,表示元字符 ( . ) 匹配所有字符
5.2.1 RegExp实例属性
实际不常用,模式声明中包含
lastIndex
flags
...
5.2.2 RegExp实例方法
主要是exec() 配合捕获组使用
方法只接受用于匹配的字符串,找到了就返回第一个匹配信息的数组,没找到就返回null
test() 返回接受的字符串是否匹配
valueOf() 返回表达式本身
5.3 原始值包装类型
ECMAScript提供了三种特殊引用类型:Boolean,number,String
这些引用类型可以使用其原始类型的方法(类似类)
会经历下面几个步骤
(1)创建一个该特殊类型的实例
(2)调用实例上的特定方法
(3)销毁实例
let s1 = 'some'
let s2 = s1.substring(2)
// 相当于执行了
let s1 = new String('some')
let s2 = s1.substring(2)
s1 = null
5.3.1 Boolean
使用Boolean对象,虽然可以,但是会有很多不必要的麻烦,因此强烈建议使用原始Boolean值
5.3.2 Number
toFixed(xx) 返回指定小数位
toExponential(xx) 返回科学计数法
isInteger() 安全整数
5.3.3 String
length() 返回字符串长度
charAt(x) 返回字符位置
charCodeAt(x) 返回x位置字符的编码
代理对:有时候,js的字符可能使用两个字节表示,所以使用charCodeAt()可能只得到了一部分
fromCodePoint() 根据编码返回字符串(charCodeAt()反方向)
normalize() 字符串规范化
contact() 字符串拼接
contact()可以接收任意参数,所有可以一次性拼接多个字符串
但是使用+号更方便
裁剪
slice(a,b) 截取从a-b的字符串
substring(a,b) 截取从a-b的字符串
substr(a,b) 截取从a开始的b个字符串
a/b有负值时:
slice把所有负值加上length
substr把首个负值加上length,第二个负值当成0
substring把所有负值当成0
位置方法
indexOf()
lastIndexOf()
包含方法
startsWith(s,begin) 以s开头
includes(s,begin) 包含s
trim() 删除前后空格
repeat() 字符串重复拼接
复制字符串,如果长度小于指定长度,则会在一边填充相应字符
padStart()
padEnd()
let s1 = 'you'
console.log(s1.padStart(8,'hi'));
console.log(s1.padEnd(8,'hi'));
迭代和解构
字符串可以通过for-of迭代
[...]解构
let s = 'abcde'
for(const c of s){
console.log(c);
}
console.log([...s]);
大小写转换
toLowerCase() toLocaleLowerCase()
toLocaleUpperCase() toUpperCase()
字符串模式匹配
match()
text.match(pattern) 等价于 pattern.exec(text)
search(pattern) 返回匹配pattern的首字符的位置
字符串位置比较
按照字典序比较
s1.localeCompare(s2)
s2 在 s1前面:1
s2 和 s1相等:0
s2 在 s1后面:-1
5.4 单例内置对象
内置对象时ECMAScript提供的,与宿主环境无关的,开发者不用显式地实例化内置对象
5.4.1 Global
代码不会显式地访问Global对象,但是在全局作用域中定义的变量和函数都会变成Global对象的属性
像是isNaN(),isFinite(),parseInt()等都是Global对象的方法
Global对象的其他方法
1.URL
encodeURI()
encodeURIComponent()
decodeURI()
decodeURIComponent()
encodeURIComponent()和decodeURIComponent()会把所有非字母字符给替换成相应的编码形式
而另外两个只会把空格编为%20
uri = "https://mp.csdn.net/mp_blog/creation/editor?spm=1000.2115.3001.5352"
console.log(encodeURI(uri));
console.log(encodeURIComponent(uri));
2.eval()
这个方法就是一个完整的ECMAScript解释器,把字符串中的语句执行
3.Global对象属性
请自行查阅
4.window对象
window对象被实现为Global对象的代理,在全局作用域中定义的变量和函数都会变成window对象的属性
但是window不只是实现了Global那么简单,在12章会详述
5.4.2 Math
1.Math对象属性
保存了一些特殊值.请自己查阅
2.min和max
可以接受任意多的参数
3.舍入方法
Math.floor() 向下舍入
Math.round() 四舍五入
Math.fround() 返回最接近的单精度浮点数
4.random
Math.random返回一个[0,1)间的数字
let num = math.floor(Math.random() * 10 + 1)
上面的代码选择一个1-10的数字
5.其他方法请自行查阅