Math
min & max
let nums = [1,2,3,4,5] console.log(Math.min(...nums)) // 1 console.log(Math.max(...nums)) // 5 复制代码
ceil、floor、round
- ceil: 向上舍入为最近接的整书
- floor:向下舍入为最接近的整数
- round:执行四舍五入
random
返回一个0~1范围内的随机数,其中包含0但是不包含1。
随机整数公式:
number = Math.floor(Math.random() * total_number_of_choices + first_possible_value) 复制代码
// 随机数 function mathRandom(lowerValue, upperValue) { let choices = upperValue - lowerValue + 1 return Math.floor(Math.random() * choices + lowerValue) } let num = mathRandom(2,10) console.log(num) // 2~10范围内的值,包含2&10 复制代码
Global
isNaN、isFinite、parseInt、parseFloat
encodeURI & encodeURIComponent
用于编码统一资源标识符(URI),以便传给浏览器。
encodeURI不会编码属于URL组件的特殊字符,比如:冒号、斜杠、问号、井号
。
encodeURIComponet会编码它发现的所有非标准字符:
let uri = "http://www.ishometown.com/illegal value.js#start"; console.log(encodeURI(uri)) // http://www.ishometown.com/illegal%20value.js#start console.log(encodeURIComponent(uri)) // http%3A%2F%2Fwww.ishometown.com%2Fillegal%20value.js%23start 复制代码
decodeURI & decodeURIComponent
decodeURI
只能对使用encodeURI
编码过的字符解码。
let uri = 'https://www.ishometown.com/vue react.js#blog' let ecuUri = encodeURI(uri) let ecucUri = encodeURIComponent(uri) console.log(decodeURI(ecuUri)) // https://www.ishometown.com/vue react.js#blog console.log(decodeURIComponent(ecucUri)) // https://www.ishometown.com/vue react.js#blog console.log(decodeURI(ecucUri)) // https%3A%2F%2Fwww.ishometown.com%2Fvue.js%23blog 复制代码
eval
解释器发现eval()
调用时,会把参数当做实际的ECMAScript语句,插入到当前位置:
let msg = 'hometown' eval("console.log(msg)") 复制代码
Date
Date类型保存UTC时间1970年1月1日0时 至今 所有经过的毫秒数。
使用方法:
new Date() 复制代码
Date 构造函数接受一个参数,可以格式化一个日期,格式化的时候会隐式调用Date.parse
方法:
let someDate = new Date('2020-01-01') // 返回 GMT // 等价于 let someDate = Date.parse('2020-01-01')// 返回时间戳 复制代码
继承的方法
Date类型的valueOf方法不返回字符串,返回的是时间戳:
const now = new Date() console.log(now.getTime() === now.valueOf()) // true 复制代码
所以两个Date类型的值可以直接比较:
const date1 = new Date(2022, 0, 1) const date2 = new Date(2022, 0, 2) console.log(date1 < date2) // true 复制代码
日期格式化方法
toDateString()
返回日期的周、月、日、年
toTimeString()
返回日期的时、分、秒、时区
toLocaleDateString()
返回日期的周、月、日、年
toLocaleTimeString()
返回日期的时、分、秒
toUTCString()
返回完整的UTC日期
toGMTString()
与toUTCString
一样,目的是为了向后兼容。
这些方法与toLocaleString
、toString
一样,会因浏览器而异。
// Chrome const date = new Date() console.log(date.toDateString()) // Mon Oct 31 2022 console.log(date.toTimeString()) // 14:23:51 GMT+0800 (中国标准时间) console.log(date.toLocaleDateString()) // 2022/10/31 console.log(date.toLocaleTimeString()) // 14:23:51 console.log(date.toUTCString()) // Mon, 31 Oct 2022 06:23:51 GMT console.log(date.toGMTString()) // Mon, 31 Oct 2022 06:23:51 GMT 复制代码
RegExp
ECMAScript通过RegExp支持正则表达式。
const expression = /pattern/flags; 复制代码
pattern 可以是任何的正则表达式。
falgs 可以拥有0个或者多个,值有以下可选值:
g
全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。i
不区分大小写m
多行模式u
Unicode模式
const pattern1 = /at/g; // 匹配字符串中所有的'at' const pattern2 = /[bc]at/i; // 匹配第一个'bat' || 'cat'不区分大小写 复制代码
元字符需要转义:
- {
- [
- \
- ^
- $
- |
- }
- ]
- .
- ?
ECMAScript中的正则表达式除了用字面量定义,还可以用构造函数:
let pattern1 = /[bc]at/gi; // 等价于 let pattern1 = new RegExp("[bc]at","gi") // 两个参数都是字符串。 复制代码
RegExp也可以基于已有的正则表达式实例使用,并可以选择性的修改flags
:
let pattern1 = /[bc]at/g; let pattern2 = new RegExp(pattern1, "i") // /[bc]at/i 复制代码
RegExp实例属性
每个RegExp实例都有以下属性:
- global: 布尔值,是否设置了flag: g
- ignoreCase: 布尔值,是否设置了flag: i
- ......
let pattrn1 = /[bc]at/g; let pattrn2 = /[ab]cd/i; console.log(pattrn1.global, pattrn2.global) //true false console.log(pattrn1.ignoreCase, pattrn2.ignoreCase) // false true 复制代码
RegExp实例方法
exec
检索字符串中的正则表达式的匹配,返回一个数组。
var text = 'JavaScript, VBScript, JScript and ECMAScript'; var pattrn = /[a-zA-Z]+Script/g; console.log(pattrn.exec(text)) // ["JavaScript", index: 0 ,.....] console.log(pattrn.exec(text)) // ["VBScript", index: 0 ,.....] console.log(pattrn.exec(text)) // ["JScript", index: 0 ,.....] 复制代码
test
搜索字符串指定的值,根据结果并返回真或假。
const pattern= new RegExp("h", 'i'); console.log(pattern.test("HoMeTown")) // true console.log(pattern.test("ooo")) // false 复制代码
总结
JavaScript中的对象成为引用值。
- JavaScript中的引用值与传统的面向对象编程中的类相似,但是实现不同。
- 函数实际上是Function类型的实例,也就是说,函数也是对象,所以函数也有方法和属性!
- Boolean、Number、String的原始值可以当做对象来用,因为他们有原始包装类型,包装类型都映射到同名的原始类型,原始值会在底层自动创建包装类型的对象,涉及到原始值的语句执行完毕后,包装对象就会被销毁。
- 代码开始执行,全局上下文中会存在两个内置对象:Global和Math。Global对象无法直接访问,浏览器将其实现为了window对象。