援用类型是把数据和性能组织在一起的构造
Date(日期和工夫)
创立
let time=new Date();//1.空时获取零碎工夫和日期2.如果为0时显示1970 年 1 月 1 日午夜(零时)console.log(time)//以后工夫和日期//new Date(year, month, date, hours, minutes, seconds, ms);参数
拜访日期组件
let now=new Date();//基于当地时区年、月、日、时、分、秒、毫秒、周console.log(now.getFullYear())//获取Date对象的年份console.log(now.getMonth())//获取Date对象的月从0~11,0示意一月份顺次类推console.log(now.getDate())//获取Date对象的日期0~31(比拟奇怪)console.log(now.getHours())//获取Date对象的小时console.log(now.getMinutes())//获取Date对象的分钟console.log(now.getSeconds())//获取Date对象的秒数console.log(now.getMilliseconds())//获取Date对象的毫秒数console.log(now.getDay())//一周中的第几天0~6周日到周六//基于UTC时区的年、月、日、时、分、秒、毫秒、周//办法同上在get后加上UTC例如:XX.getUTCXX()console.log(now.getTime())//获取工夫戳(1970-1-1 00:00:00 UTC+0 开始到当初所通过的毫秒数。)console.log(Date.now())//获取工夫戳鼎力举荐此办法长处泛滥(不便,快,不会给垃圾处理带来额定开销)console.log(+now)//获取工夫戳console.log(now.getTimezoneOffset())//获取UTC 与本地时区之间的时差,以分钟为单位
设置日期组件
let now=new Date();//基于当地时区年、月、日、时、分、秒、毫秒、周的篡改now.setFullYear(year,month,date)//设置Date对象的年份now.setMonth(month,date)//设置Date对象的月从0~11,0示意一月份顺次类推now.setDate(date)//设置Date对象的日期0~31(比拟奇怪)now.setHours(hour,min,sec,ms)//设置Date对象的小时now.setMinutes(min,sec,ms)//设置Date对象的分钟now.setSeconds(sec,ms)//设置Date对象的秒数now.setMilliseconds(ms)//设置Date对象的毫秒数//由工夫戳转日期now.setTime(工夫戳)//返回工夫戳对应的日期和工夫//对于UTC时区年、月、日、时、分、秒、毫秒、周的篡改//办法与当地时区相似在set后加上UTC例如:xx.setUTCxx();
主动校准
//设置超范围的数值,Date会主动校准;//例如:let time=new Date(2022,1,35);console.log(time)// Fri Mar 04 2022 00:00:00 GMT+0800 (中国规范工夫)
从字符串中读取日期
Date.parse(str)//str格局YYYY-MM-DDTHH:mm:ss.sssZ/*参数阐明:YYYY-MM-DD —— 日期:年-月-日。字符 "T" 是一个分隔符。HH:mm:ss.sss —— 工夫:小时,分钟,秒,毫秒。可选字符 'Z' 为 +-hh:mm 格局的时区。单个字符 Z 代表 UTC+0 时区。*/例如Date.parse('2022-03-17T12:09:50.500-08:00')//工夫戳//通过Date对象工夫戳转日期let time=new Date(Date.parse('2022-03-17T12:09:50.500-08:00'))console.log(time)//Fri Mar 18 2022 04:09:50 GMT+0800
日期格式化
let time=new Date();console.log(time.toDateString())//年月日周几 Thu Mar xx xxxxconsole.log(time.toTimeString())//时分秒 xx:xx:xx GMT+0800 (中国规范工夫)console.log(time.toLocaleDateString())//年月日特定格局xxxx/xx/xxconsole.log(time.toLocaleTimeString)//时分秒 上/下午 xx:xx:xxconsole.log(time.toUTCString())//显示残缺的 UTC 日期Thu, 17 Mar 2022 04:34:47 GMT
RegExp (正则表达式)
正则表达式是搜寻和替换字符串的一种弱小形式
创立正则表达式的办法:
let regexp=RegExp("pattern", "flags");//字符串中动静地结构模式let regexp1=/pattern/igm;//简短语法
字符类:
符号 | 阐明 |
---|---|
\ | 字符边界 |
^ | 1.匹配输出开始 2.1匹配除方括号内的所有字符 |
$ | 匹配输出完结 |
* | 匹配前一个表达式 0 次或屡次,等价于{0,} |
+ | 匹配后面一个表达式 1 次或者屡次 等价于{1,} |
? | 匹配后面一个表达式 0 次或者 1 次 等价于{0,1} |
(x) | 匹配 'x' 并且记住匹配项 |
(?:x) | 匹配 'x' 然而不记住匹配项 |
x(?=y) | 匹配'x'仅仅当'x'前面跟着'y'.这种叫做后行断言 |
(?<=y)X | 匹配'x'仅当'x'后面是'y'.这种叫做后行断言 |
x(?!y) | 仅仅当'x'前面不跟着'y'时匹配'x',这被称为正向否定查找 |
(?<!y)x | 仅仅当'x'后面不是'y'时匹配'x',这被称为反向否定查找 |
x | y | 匹配‘x’或者‘y’ |
{n} | n 是一个正整数,匹配了后面一个字符刚好呈现了 n 次 |
{n,} | n 是一个正整数,匹配前一个字符至多呈现了n次 |
{n,m} | n 和 m 都是整数。匹配后面的字符至多n次,最多m次 |
[xyz] | 匹配方括号中的任意字符 |
2 | 它匹配任何没有蕴含在方括号中的字符 |
[\b] | 匹配一个退格(U+0008) |
\b | 匹配一个词的边界(一个词的边界就是一个词不被另外一个“字”字符追随的地位或者后面跟其余“字”字符的地位) |
\B | 匹配一个非单词边界 1.字符串第一个字符为非“字”字符 2.字符串最初一个字符为非“字”字符3. 两个单词字符之间 4.两个非单词字符之间 5. 空字符串 |
\cX | 当X是处于A到Z之间的字符的时候,匹配字符串中的一个控制符 |
\f | 匹配一个换页符 (U+000C) |
\n | 匹配一个换行符 (U+000A) |
\r | 匹配一个回车符 (U+000D) |
\t | 匹配一个程度制表符 (U+0009) |
\v | 匹配一个垂直制表符 (U+000B) |
\n | 在正则表达式中,它返回最初的第n个子捕捉匹配的子字符串(捕捉的数目以左括号计数)。 |
\0 | 匹配 NULL(U+0000)字符, 不要在这前面跟其它小数,因为 \0<digits> 是一个八进制转义序列 |
\xhh | 匹配一个两位十六进制数(\x00-\xFF)示意的字符 |
\uhhhh | 匹配一个四位十六进制数示意的 UTF-16 代码单元 |
\u{hhhh} | (仅当设置了u标记时)匹配一个十六进制数示意的 Unicode 字符 |
\d | 数字。 |
\D | 非数字。 |
\s | 空格符号,制表符,换行符。 |
\S | 除了 \s 。 |
\w | 拉丁字母,数字,下划线 '_'。 |
\W | 除了 \w。 |
. | 任何带有 's' 标记的字符,否则为除换行符 \n之外的任何字符。 |
匹配模式标记:
参数 | 阐明 |
---|---|
g | 全局模式,示意查找字符串的全部内容,而不是找到第一个匹配的内容就完结。 |
i | 不辨别大小写,示意在查找匹配时疏忽 pattern 和字符串的大小写。 |
m | 多行模式,示意查找到一行文本开端时会持续查找。 |
y | 粘附模式,示意只查找从 lastIndex 开始及之后的字符串。 |
u | Unicode 模式,启用 Unicode 匹配。 |
s | dotAll 模式,示意元字符.匹配任何字符(包含\n 或\r) |
RegExp 实例属性
属性 | 类型 | 阐明 |
---|---|---|
global | 布尔值 | 示意是否设置了 g 标记。 |
ignoreCase | 布尔值 | 示意是否设置了 i 标记。 |
unicode | 布尔值 | 示意是否设置了 u 标记。 |
sticky | 布尔值 | 示意是否设置了 y 标记。 |
lastIndex | 整数 | 示意在源字符串中下一次搜寻的开始地位,始终从 0 开始。 |
multiline | 布尔值 | 示意是否设置了 m 标记。 |
dotAll | 布尔值 | 示意是否设置了 s 标记。 |
source | 字符串 | 正则表达式的字面量字符串(不是传给构造函数的模式字符串),没有结尾和结尾的斜杠。 |
flags | 字符串 | 正则表达式的标记字符串。始终以字面量而非传入构造函数的字符串模式模式返回(没有前后斜杠)。 |
RegExp 实例办法
办法 | 形容 |
---|---|
exec | 一个在字符串中执行查找匹配的RegExp办法,它返回一个数组(未匹配到则返回 null)。 |
test | 一个在字符串中测试是否匹配的RegExp办法,它返回 true 或 false。 |
match | 一个在字符串中执行查找匹配的String办法,它返回一个数组,在未匹配到时会返回 null。 |
matchAll | 一个在字符串中执行查找所有匹配的String办法,它返回一个迭代器(iterator)。 |
search | 一个在字符串中测试匹配的String办法,它返回匹配到的地位索引,或者在失败时返回-1。 |
replace | 一个在字符串中执行查找匹配的String办法,并且应用替换字符串替换掉匹配到的子字符串。 |
split | 一个应用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 办法。 |
RegExp 构造函数实例属性
全 名 | 简 写 | 说 明 |
---|---|---|
input | $_ | 最初搜寻的字符串(非标准个性) |
lastMatch | $& | 最初匹配的文本 |
lastParen | $+ | 最初匹配的捕捉组(非标准个性) |
leftContext | $` | input 字符串中呈现在 lastMatch 后面的文本 |
rightContext | $' | input 字符串中呈现在 lastMatch 前面的文本 |
原始值包装类型
为了不便操作原始值,ECMAScript创立了3种非凡的援用类型:Boolean、Number、String,其特点具备其余援用类型的特点,也具备各自原始类型对应的非凡行为。但咱们拜访原始类型的办法和属性时,后盾会主动创立绝对应的原始类型包装对象从而暴露出操作对应原始值的办法。
let str="LLY"let str1=str.substring(2)//Y下面的例子经验了3个过程1.创立String实例let str=new String("LLY")2.调用实例上的非凡办法let str1=str.substring(2)3.销毁实例str=null Number和Boolean包装对象同样经验以上3个阶段
援用值类型和原始值包装类型的区别在生命周期的不同:
应用new实例化援用类型,失去的实例会在来到作用域后销毁,主动创立的原始值包装对象,只在拜访的那一行代码的执行期间。
/*留神!!!!因为原始值包装对象的生命周期只存在于执行期间所以不能给运行时的原始值增加属性和办法*/let str="122"str.name="lly"console.log(str.name)//undefined/*留神!!!应用 new 调用原始值包装类型的构造函数,与调用同名的转型函数并不一样。*/let value="123"let num=Number(value);console.log(typeof num)//Numberlet num1=new Number(value)console.log(typeof num1)//Object
Boolean
了解和辨别原始值Boolean和Boolean对象。
通过typeof判断类型原始值boolean为Boolean,boolean对象类型为object。let falseObj= new Boolean(false); let result = falseObj && true; //类型转换后进行运算(对象隐式转换boolean类型为true)console.log(result); // true let falseValue = false; result = falseValue && true; //纯布尔值运算console.log(result); // false
- Number
对于Number类型重写了valueOf()、toLocaleString()和 toString(),valueOf返回Number对象所示意的值,toLocaleString和toString返回数值字符串 继承的办法:
let num=new Number("1234567890");console.log(num.valueOf())//1234567890数字类型的数字console.log(num.toString())//1234567890十进制的数字能够传递一个参数示意返回几进制的数字字符串(2,8,10,16进制数)console.log(num.toLocaleString())//1,234,567,890
- Number类型对应的非凡行为:
1.指定小数位数的办法
xx.toFixed(n)//n示意要保留小数点的位数如果超出指定地小数点位数会采取四舍五入取值
2.迷信计数法
xx.toExponential(n)//以指数记数的办法显示数字
3.以上两种计数办法的综合体
xx.toPrecision(n)//依据状况返回最正当的输入后果,可能是固定长度,也可能是迷信记数法模式。这个办法接管一个参数,示意后果中数字的总位数(不蕴含指数)
以上三种办法都会采取向上和向下取舍
4.平安整数
Number.isInteger(num)//num要判断的参数用于判断是不是一个平安的整数有时也会把小数位的 0可能会让人误以为数值是一个浮点值。
5.鉴定数值是否是平安范畴的整数数值
Number.isSafeInteger(num)//num要判断的数值(平安范畴Max:~+2~53 -1 Min:~-2~53+1)
6.测试 - isNaN(value)判断参数是不是NaN
将其参数转换为数字,而后测试它是否为 NaN: - isFinite(value)判断是不是惯例数字,惯例数字返回true否则false
7.其余 - parseInt(value)//从字符串中读取数字,只返回整数局部
- parseFloat(value)//从字符串中读取数字,能够读取一个小数点,返回的浮点数
- String
- 引号3种(1.' '2." "3.
- 长度length(通过xx.length获取字符串的长度)
JavaScript字符
//以下办法为惯例let str="abcdefghig"//charAt()返回给定索引地位的字符str.charAt(0)//a 此办法等价于str[0],惟一区别没有参数charAt返回空字符,[]返回undefined//charCodeAt()办法能够查看指定码元的字符编码。str.charCodeAt(0)//97 a字符对应的字符编码/*fromCharCode()办法用于依据给定的 UTF-16 码元创立字符串中的字符特点:能够承受任意多个数值,返回将所有数值对应的字符拼接起来的字符串*/console.log(String.fromCharCode(97,98,99,100))//abcd//解决 emoji、常见的数学或象形文字或其余常见的符号let str1="abde";//codePointAt()对应charCodeAt()console.log(str1.length)//6console.log(str1.charCodeAt(0))//97console.log(str1.charCodeAt(1))//98console.log(str1.charCodeAt(2))//55357console.log(str1.charCodeAt(3))//56834console.log(str1.charCodeAt(4))//100console.log(str1.charCodeAt(5))//101//////console.log(str1.codePointAt(0))//97console.log(str1.codePointAt(1))//98console.log(str1.codePointAt(2))//128514console.log(str1.codePointAt(3))//56834console.log(str1.codePointAt(4))//100console.log(str1.codePointAt(5))//101//fromCodePoint()对应fromCharCode()console.log(String.fromCharCode(97, 98, 55357, 56842, 100, 101)); //abdeconsole.log(String.fromCodePoint(97, 98, 128522, 100, 101)); //abde//字符串转数组console.log([...str])//["a", "b", "c", "d", "e", "f", "g", "h", "i", "g"]
字符串操作
//拼接let name="ly"let sex="man"let age="18"name.concat(sex,age)//lyman18
扭转大小写
let str="abc"//所有字符串的转换成大写console.log(str.toUpperCase())//ABClet str1="EFG"//所有字符串的转换成小写console.log(str1.toLowerCase())//efg
查找子字符串
let str="my name is lly"//indexOf(substr,pos)substr要查问的字符pos既定查问的地位str.indexOf("m",0)//查问到后返回第一次呈现的地位,没有查问到返回-1//lastIndexOf(substr, pos)从开端开始查问str.lastIndexOf("y")////includes(substr,pos)//查问进去有就返回true否则falsestr.includes('lly')//true//startsWith()//字符串正序开始查问到返回true否则falsestr.startsWith('my')//truestr.startsWith('y')//false//endsWith()//字符串倒序开始查问到返回true否则falsestr.endsWith('lly')//truestr.endsWith('is')//false
获取子字符串
let str="stringify"//slice(start [, end])获取字符的起始地位以及完结的地位,不蕴含完结地位的字符,不容许start>endstr.slice(0,2)//ststr.slice(2)//ringifystr.slice(-2,-1)//f//substring能够容许start>end//和slice用法雷同区别是该办法容许start大于end//substr(start,length)//获取字符的起始地位以及截取的长度str.substr(0,2)//ststr.substr(-1,1)//y
比拟字符
let str="ABC"let str1="a"str.localeCompare(str1)//1//如果str>str1返回正值否则返回负值
字符串模式匹配办法
let str="abcd0123456789efghigk"//match()参数为正则表达式或RegExp对象str.match(/[0-9]+/)// ["0123456789", index: 4, input: "abcd0123456789efghigk", groups: undefined]//search()//参数为正则表达式或RegExp对象str.search(/[0-9]+/)//0返回匹配字符的索引地位//replace()第一个参数能够是字符或正则式,第二个参数要替换的内容str.replace(/[0-9]+/,'@')//abcd@efghigk
其余
let str= " 123 "//删除字符串前后的空格str.trim()//123//字符串反复n次str.repeat(2)// 123 123let name="lly"//复制字符//从字符之前填充参数1字符长度。参数2填充字符默认为空name.padStart(9,"@")//@@@@@@lly//从字符之后填充参数1字符长度。参数2填充字符默认为空name.padEnd(9,"#")//lly######
单例内置对象
- Global
最特地的对象,代码不会显示的拜访,(兜底对象),全局作用下的变量和函数都是Global对象的属性。 - Global对象的其余办法
URL 编码方法
encodeURI()和 encodeURIComponent()办法用于编码对立资源标识符(URI),以便传给浏览器。URI办法://编码1.encodeURI()//用于对整个 URI 进行编码,2.encodeURIComponent()//用于编码 URI 中独自的组件//两者区别:encodeURI()不会编码属于 URL 组件的特殊字符,encodeURIComponent()会编码它发现的所有非标准字符let URL='https://segmentfault.com/u/liluyao_5f4e43431bf0b/articles 'console.log(URL)//1console.log(encodeURI(URL))//2console.log(encodeURIComponent(URL))//31.https://segmentfault.com/u/liluyao_5f4e43431bf0b/articles2.https://segmentfault.com/u/liluyao_5f4e43431bf0b/articles%203.https%3A%2F%2Fsegmentfault.com%2Fu%2Fliluyao_5f4e43431bf0b%2Farticles%20//解码3.decodeURI()4.decodeURIComponent()let url1='https://segmentfault.com/u/liluyao_5f4e43431bf0b/articles%20'let url2='https%3A%2F%2Fsegmentfault.com%2Fu%2Fliluyao_5f4e43431bf0b%2Farticles%20'console.log(decodeURI(url1))//1console.log(decodeURIComponent(url2))//21.https://segmentfault.com/u/liluyao_5f4e43431bf0b/articles 2.https://segmentfault.com/u/liluyao_5f4e43431bf0b/articles
eval()(ECMAScript 解释器,最弱小的办法)
/*残缺的ECMAScript 解释器,接管一个要执行的ECMAScript字符串参数。eval()能够把字符串解析成要执行的ECMAScript语句,通过 eval()执行的代码属于该调用所在上下文,被执行的代码与该上下文领有雷同的作用域链。所以在非严格模式下同一执行行上下文中的变量和函数eval外部的代码和内部代码能够互相援用。*/eval(`console.log("hi")`)//hi等价console.log("hi")//通过 eval()定义的任何变量和函数都不会被晋升console.log(name)//Uncaught name is not definedeval(`var name="lly"`)console.log(name)//llyeval(`function fn(){return 'lly'}`)console.log(fn())//Uncaught fn is not definedeval(`function fn(){return 'lly'}`)console.log(fn())//lly//在严格模式下,在 eval()外部创立的变量和函数无奈被内部拜访//eval()尽管弱小,留神谨慎应用!!!!!
- Global 对象属性
属性 | 阐明 |
---|---|
undefined | 非凡值 undefined |
NaN | 非凡值 NaN |
Infinity | 非凡值 Infinity |
Object | Object 的构造函数 |
Array | Array 的构造函数 |
Function | Function 的构造函数 |
Boolean | Boolean 的构造函数 |
String | String 的构造函数 |
Number | Number 的构造函数 |
Date | Date 的构造函数 |
RegExp | RegExp 的构造函数 |
Symbol | Symbol 的伪构造函数 |
Error | Error 的构造函数 |
EvalError | EvalError 的构造函数 |
RangeError | RangeError 的构造函数 |
ReferenceError | ReferenceError 的构造函数 |
SyntaxError | SyntaxError 的构造函数 |
TypeError | TypeError 的构造函数 |
URIError | URIError 的构造函数 |
- window对象(作为浏览器端Global对象的代理对象)
获取Global对象的办法
1.通过window对象间接拜访Global对象
2.let globalObj=function (){
return this
}() - Math
Math对象提供保留数学公式、信息和计算的中央。 - Math的属性:
属性 | 阐明 |
---|---|
Math.E | 自然对数的基数 e 的值 |
Math.LN10 | 10 为底的自然对数 |
Math.LN2 | 2 为底的自然对数 |
Math.LOG2E | 以 2 为底 e 的对数 |
Math.LOG10E | 以 10 为底 e 的对数 |
Math.PI | 的值 |
Math.SQRT1_2 | 1/2 的平方根 |
Math.SQRT2 | 2 的平方根 |
- Math的办法
取出数值中的最大和最小值
//最大值Math.max(0,1,2,3,4)//4//最小值Math.min(0,1,2,3,4)//0
舍入办法
//小数值舍入成整数//向上舍入只有小数点大于0就进一位Math.ceil(1.001)//2//向下舍入成整数Math.floor(1.009)//1//四舍五入。Math.round(1.49)//1Math.round(1.5)//2//返回最靠近的单精度(32 位)浮点值Math.fround(1.0023)//1.0023000240325928
生成随机数办法
Math.random()//生成0~1的随机数//生成指定范畴的随机数办法function radomFn(lower,upper){let choices=upper-lower+1return Math.floor(Math.random()*choices+lower)}//留神!!!!!/*为了加密而须要生成随机数(传给生成器的输出须要较高的不确定性),那么倡议应用 window.crypto. getRandomValues()。*/cryptoObj.getRandomValues(typedArray);/*typedArray阐明蕴含Int8Array、Uint8Array、Int16Array、Uint16Array、Int32Array、Uint32Array*/let array = new Uint32Array(10);window.crypto.getRandomValues(array);//生成随机数
- 其余办法
办法 | 阐明 |
---|---|
Math.abs(x) | 返回 x 的绝对值 |
Math.exp(x) | 返回 Math.E 的 x 次幂 |
Math.expm1(x) | 等于 Math.exp(x) - 1 |
Math.log(x) | 返回 x 的自然对数 |
Math.log1p(x) | 等于 1 + Math.log(x) |
Math.pow(x, power) | 返回 x 的 power 次幂 |
Math.hypot(...nums) | 返回 nums 中每个数平方和的平方根 |
Math.clz32(x) | 返回 32 位整数 x 的前置零的数量 |
Math.sign(x) | 返回示意 x 符号的 1、0、-0 或-1 |
Math.trunc(x) | 返回 x 的整数局部,删除所有小数 |
Math.sqrt(x) | 返回 x 的平方根 |
Math.cbrt(x) | 返回 x 的立方根 |
Math.acos(x) | 返回 x 的反余弦 |
Math.acosh(x) | 返回 x 的反双曲余弦 |
Math.asin(x) | 返回 x 的反正弦 |
Math.asinh(x) | 返回 x 的反双曲正弦 |
Math.atan(x) | 返回 x 的反正切 |
Math.atanh(x) | 返回 x 的反双曲正切 |
Math.atan2(y, x) | 返回 y/x 的反正切 |
Math.cos(x) | 返回 x 的余弦 |
Math.sin(x) | 返回 x 的正弦 |
Math.tan(x) | 返回 x 的正切 |
- a-z ↩
- xyz ↩