当前位置: 首页 > Web前端 > JavaScript

JavaScript高级编程笔记05基础引用类型

时间:2023-03-26 22:43:09 JavaScript

一个引用值(对象)是一个特定引用类型的实例。引用类型是将数据和功能组合在一起的结构。引用类型有时也称为对象定义,因为它们描述了自己的对象应该具有的属性和方法。Date指的是早期Java版本中的java.util.Date。因此,Date类型将日期保存为自1970年1月1日午夜(零点)以来经过的毫秒数,UTC(协调世界时)时间。Date类型可以准确表示1970年1月1日前后及之后285616年的日期。要基于其他日期和时间创建日期对象,必须传入其毫秒表示形式。ECMAScript为此提供了两个辅助方法:Date.parse()和Date.UTC()。日期。解析()。接收表示日期的字符串参数,并尝试将此字符串转换为表示该日期的毫秒数。ES5定义了支持的日期格式:“月/日/年”“月名日,年”“周月名日年时:分:秒时区”ISO8601扩展格式“YYYY-MM-DDTHH:mm:ss。如果传入的字符串不表示日期,sssZ"将返回NaN。如果将表示日期的字符串传递给Date构造函数,Date.parse()将在后台自动调用。对于越界日期,不同的浏览器有不同的处理。日期。世界标准时间()。还返回日期的毫秒表示形式。使用的参数是年、从零开始的月(0-11)、日(1-31)、小时(0-23)、分、秒和毫秒。只需要年份和月份。也由Date构造函数隐式调用。创建的是本地日期,不是GMT日期(参数是GMT时区下的时间)。日期。现在()。返回表示执行该方法的日期和时间的毫秒数。可用于代码分析。继承方法:toLocaleString():返回与浏览器运行的本地环境一致的日期和时间。(包括AM/PM,不包括时区信息)toString():返回带有时区信息的日期和时间。(时间为24小时格式)valueOf():返回日期的毫秒表示形式。小于和大于等运算符可以直接使用它返回的值。(保证日期的简单方法)日期格式化方法:返回一个字符串(与具体实现有关,因浏览器而异)toDateString():显式日期中的星期几、月、日、年;toTimeString():显式日期中的时、分、秒和时区;toLocaleDateString():显式日期中的星期几、月、日、年(与地区有关)toLocakeTimeString():显式日期中的时、分、秒;toUTCString():显示完整的UTC日期。GMT=UTC+0(https://www.zhihu.com/questio...)RegExp使用类似于Perl的简洁语法创建:letexpression=/pattern/flags;可以携带0个或多个标志(flags):g:全局模式i:不区分大小写m:多行模式y:粘性模式,表示只查找从lastIndex开始到u之后的字符串:Unicode模式,启用Unicode匹配s:dotAll模式,表示元字符。匹配任何字符(包括\n或\r)所有元字符都必须在模式中转义,包括:([{\^$|}])?*+。它也可以使用RegExp构造函数创建,接收两个参数:模式字符串和(可选)标记字符串。因为RegExp的pattern参数是字符串,所以在某些情况下需要二次转义。使用RegExp也可以基于现有的正则表达式实例并有选择地修改它们的标记。构造函数属性:根据最后执行的正则表达式操作而有所不同,可以通过两种不同的方式访问它们,全名和简写。可以提取有关exec()和test()执行的操作的信息。input($_)最后搜索到的字符串leftContext($`),rightContext($')$`输入字符串中lastMatch之前出现的文本$'输入字符串中lastMatch之后出现的文本lastParen($+)、lastMatch($&)$+最后匹配的捕获组$&最后匹配的文本也可以存储最多9个捕获组的匹配项,可以通过RegExp.$1~RegExp.$9访问。原型属性globalignoreCaseunicodestickymultilinedotAlllastIndex:整数,表示下一次在源字符串中查找的起始位置,始终从0开始正则表达式的stringsource和flags属性返回规范化后可以在文字中使用的形式。lastIndex在非全局模式下始终不变。原型方法exec主要用于捕获组。只接受一个参数,即应用模式的字符串。如果找到,则返回一个数组,其中包含有关第一个匹配项的信息(具有两个附加属性:索引和输入);如果未找到,则返回null。index:匹配模式在字符串中的起始位置;输入:要查找的字符串。数组的第一个元素是匹配整个模式的字符串,其他元素是匹配表达式中捕获组的字符串。没有捕获组,数组只包含一个元素。如果设置了全局标志:每次调用exec()方法都会返回匹配的消息,直到搜索到字符串的末尾。如果不设置,每次调用只会返回第一个匹配的信息。如果设置了粘性标志y:,则每次调用只会在lastIndex处查找匹配项。粘性标签覆盖全局标签。lettext="momanddadandbaby";letpattern=/mom(anddad(andbaby)?)?/gi;letmatches=pattern.exec(text);console.log(matches);console.log(匹配.index);//0console.log(matches.input);//爸爸妈妈和宝宝console.log(matches[0]);//爸爸妈妈和宝宝console.log(matches[1]);//还有爸爸和宝宝console.log(matches[2]);//和babyconsole.log(pattern.lastIndex);//20lettext2="mom";//pattern.lastIndex=0;letmatches2=pattern.exec(text2);console.log(matches2);//nullconsole.log(pattern.lastIndex);//0lettext3="momanddad";letmatches3=pattern.exec(text3);console.log(matches3.input);//妈妈和爸爸console.log(pattern.lastIndex);//11test接受一个字符串参数。输入文本是否与模式匹配继承的方法toLocaleString()和toString()都返回正则表达式的文字表示。valueOf()也是如此。原始值包装器类型在读取模式下访问原始值时存在限制:临时创建一个包装器对象并使用该对象操作相应的数据以销毁临时对象。不建议显式使用它,但它对于操作原始值的功能很重要。NumbervalueOf():返回Number对象所表示的原始值toString():可选地接收一个表示基数的参数,并以对应基数的形式返回一个数字字符串将值格式化为字符串:toFixed():返回一个包含指定小数位数字符串的数字字符。接收一个参数,表示结果字符串中的小数位数。超出部分四舍五入到最接近的小数位。通常可以表示一个带0~20位小数的值。toExponential():返回以科学记数法表示的数字字符串。它还接收一个参数,指示结果中的小数位数。toPrecision():根据情况返回最合理的输出结果,可以是定长也可以是科学计数法。接收一个参数,表示结果中数字(不包括指数)的总位数。本质上,调用toFixed()或toExponential()的决定是基于值和精度。以上所有3项都会向上或向下舍入。(为了准确表示小数位正确的值)与number原值的typeof和instanceof运算结果不一致。(一个是原始值,一个是参考值)isInteger()方法和安全整数:isInteger():ES6new,用于区分一个值是否保存为整数安全整数:所有整数都有唯一的浮点-点表示。范围是Number.MIN_SAFE_INTEGER(-2^53+1)到Number.MAX_SAFE_INTEGER(2^53-1)。Boolean:不推荐使用由16个代码单元(codeunit)组成的String。对于大多数字符,每个16位代码单元对应一个字符。JavaScript字符串混合使用两种Unicode编码:UCS-2和UTF-16。对于16位可以编码的字符(U+0000~U+FFFF),这两种编码其实是一样的,扩展到UnicodeSupplementaryCharacterPlane就不成立了。16位只能唯一表示65536(2^17-1)个字符。每个字符使用两个16位代码单元的策略称为代理对。继承的方法valueOf()、toLocaleString()和toString()都返回对象的原始字符串值。正则相关方法(模式匹配方法)p125match、searchmatch:可以接收一个参数,一个正则表达式字符串或者一个RegExp对象。(在非全局情况下),该方法返回的数组与RegExp对象的exec()方法返回的数组相同。search:接收一个参数,一个正则表达式字符串或者一个RegExp对象。返回模式中第一个匹配项的索引,如果未找到则返回-1。始终从前到后匹配模式。replace,splitreplace:第一个参数可以是RegExp对象或者字符串(不会转换成正则表达式),第二个参数可以是字符串或者当第二个参数是字符串时是一个函数,有几个特殊的字符序列可用于插入正则表达式操作的值。字符序列替换文本$$$$&匹配整个模式的子字符串。与RegExp.lastMatch相同$'匹配子字符串之前的字符串。与RegExp.rightContext相同$`匹配的子串之后的字符串。同RegExp.leftContext$n匹配第n个捕获组的字符串,n为0-9。如果没有捕获组,则值为空字符串$nn,匹配第nn个捕获组的字符串,其中nn为01-99。如果没有捕获组,则值为空字符串lettext="cat,bat,sat,fat";letresult=text.replace(/(.at)/g,"word($1)");console.log(result);functionhtmlEscape(text){returntext.replace(/[<>"&]/g,function(match,pos,originalText){switch(match){case"<":返回"<";case">":返回">";case"&":返回"&";case"\"":返回""";}});}console.log(htmlEscape("Helloworld!

"));//Helloworld!

当第二个参数是一个函数时,该函数应该返回一个字符一个字符串表示什么shouldreplacethematchwith.(你可以更详细地控制替换过程)split:第一个参数可以是RegExp对象或字符串(不会被转换成正则表达式),第二个参数是可选的,指定大小返回的数组不会超过.根据传入的分隔符将字符串拆分为数组。String:charAt():返回给定索引位置的字符charCodeAt(),codePointAt()charCodeAt():返回指定索引位置的码元值codePointAt():返回指定索引位置的码点(a的Unicode完整ID中的字符)。正确解析包含单代码单元字符和代理对字符的字符串。接收16位代码单元的索引(如果传递的索引不是代理对的开头,将返回不正确的代码点)。遍历字符串(扩展操作)可以智能地识别代理项对的代码点。fromCharCode()、fromCodePoint()fromCharCode():根据给定的UTF-16代码单元在字符串中创建字符。其实就是直接根据提供的二进制表示组合成字符串fromCodePoint():接收任意数量的码点,返回字符串与相应字符拼接的归一化形式:normalize()的编码方式比较运算符不关心字符的外观。4种归一化形式:NFD、NFC、NFKD、NFKC选择相同的归一化形式可以使比较运算符返回正确的结果。操作字符串padStart、padEnd、repeatrepeat:接收一个整型参数,表示将字符串复制多少次,然后返回所有副本拼接的结果。padStart、padEnd:接收一个参数作为长度(填充后整个字符串的长度),第二个可选参数为填充后的字符串,默认为空格(U+0020)。如果长度小于或等于字符串长度,则返回原始字符串。concat追加多个字符串(日常使用较多+号)截取字符串:slice,substring,substr——arg1(正值)arg2(正值)参数(负值)slice子串的起始位置和结束位置(不包括)stringlength+(negativevalue)substring转换为0同上,较小的参数将作为起点substr同上。—>number查找传入的字符串并返回位置,如果没有找到则返回-1。定位子串(从前到后,从后到前),第二个参数可选,表示开始查找的位置。startWith,endWith,includes-->booleanincludes,检查整个字符串。startWith和includes,可选的第二个参数表示从哪里开始搜索。endWith是可选的第二个参数,指示应被视为字符串结尾的位置。trim:创建字符串的副本,删除所有前导和尾随空格,并返回结果。@@iterator方法暴露在迭代和解构字符串的原型上。可以使用for-of和...解构运算符case:toLowerCase,toUpperCase比较两个字符串:localeCompare(字母顺序,区分大小写,比如在美国:大写字母在小写字母之前)判断的区域此方法如何比较字符串。字符串应该在参数之前,返回一个负值;字符串等于参数,返回0;字符串应该在参数之后,返回一个正值(通常为1)singletonbuilt-inobject内置对象:由ECMAScript实现提供,与宿主环境无关,在ECMAScript程序开始执行时存在的对象。Global——浏览器窗口ECMA-262规定Global对象是一个catch-all对象,针对的是不属于任何对象的属性和方法。在大多数ECMAScript实现中不能直接访问。URL编码方法:用于编码一个统一资源标识符(URI)以传输给浏览器。encodeURI\encodeURIComponent:encodeURI——对整个URI进行编码,不会对属于URL组成部分的特殊字符进行编码,如冒号、斜杠、问号、井号;encodeURIComponent——对URI中的单个组件进行编码,对所有非标准字符进行编码。查询字符串参数比基本URI编码更多次。decodeURI\decodeURIComponent替代escape()和unescape()方法,只能正确编码ASCII字符,URI方法可以编码所有Unicode字符。//URL编码functionleturi="http://www.wrox.com/illegalvalue.js#start";console.log(encodeURI(uri));//http://%20www.wrox.com/非法%20value.js#startconsole.log(encodeURIComponent(uri));//http%3A%2F%2F%20www.wrox.com%2Fillegal%20value.js%23startconsole.log(decodeURI(encodeURIComponent(uri)));//http%3A%2F%2Fwww.wrox.com%2Fillegalvalue.js%23startconsole.log(decodeURIComponent(encodeURIComponent(uri)));//http://www.wrox.com/illegalvalue.js#starteval()方法:一个完整??的ECMAScript解释器,它接收一个参数,该参数是要执行的ECMAScript字符串。正在执行的代码与调用上下文具有相同的作用域链。不会提升通过eval()定义的任何变量和函数。在严格模式下,无法从外部访问在eval()内部创建的变量和函数。全局对象属性,窗口对象window对象:浏览器将window对象实现为Global对象的代理。数学:保存数学公式、信息和计算的地方。包含有助于复杂计算的属性和方法。数学计算的精度因浏览器、操作系统、指令集和硬件而异。对象属性:主要用于保存一些数学上的特殊值min、max:用于确定一组值中的最小值和最大值。接受任意数量的参数。ceil、floor、round、froundceil:向上舍入到最接近的整数floor:向下舍入到最接近的整数round:舍入到最接近的整数fround:返回值的最接近的单精度(32位)浮点表示形式。random[0,1)//lowerValue,upperValue随机返回最小值和最大值functionselectFrom(lowerValue,upperValue){letchoices=upperValue-lowerValue+1;返回Math.floor(Math.random()*choices+lowerValue);//Math.random()*choices=>[0,choices)//Math.random()*choices+lowerValue=>[lowerValue,choices+lowerValue)}selectFrom(2,10);如果为了加密生成随机数,推荐使用window.crypto.getRandomValues()。简单或高阶算术的其他方法