第五章:基本引用类型

5.1 Date

1.在不给 Date 构造函数传参数的情况下,创建的对象将保存当前日期和时间
2.要基于其他日期和时间创建日期对象,必须传入其毫秒表示(UNIX 纪元 1970 年 1 月 1 日午夜之后的毫秒数)。ECMAScript为此提供了两个辅助方法:Date.parse()和 Date.UTC()。
1)Date.parse:

  • 月/日/年
  • 月名 日, 年
  • 周几 月名 日 年 时:分:秒 时区
  • ISO 8601 扩展格式“YYYY-MM-DDTHH:mm:ss.sssZ

注意:
1.new Date(Date.parse(“May 23, 2019”)) = new Date(“May 23, 2019”);,但是后者隐式调用创建的是本地时间
2.如果传给 Date.parse()的字符串并不表示日期,则该方法会返回 NaN
2)Date.UTC:

// GMT 时间 2000 年 1 月 1 日零点
let y2k = new Date(Date.UTC(2000, 0));
// GMT 时间 2005 年 5 月 5 日下午 5 点 55 分 55 秒
let allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));

注意:Date.UTC()与 Date.parse()一样,也会被 Date 构造函数隐式调用,创建的是本地日期,不是 GMT 日期
3)Date.now,返回表示方法执行时日期和时间的毫秒数.

let start = Date.now();
doSometing();
let stop = data.now();
result = stop - start;

5.1.1 继承的方法

new Date().toString() //Mon Dec 20 2021 15:13:14 GMT+0800 (中国标准时间)
new Date().toLocaleString() // 2021/12/20 下午3:13:05
new Date().valueOf() // 1639984423220

5.1.2 日期格式化方法

new Date().toDateString() // Mon Dec 20 2021
new Date().toTimeString() // 15:18:58 GMT+0800 (中国标准时间)
new Date().toLocaleDateString()// 2021/12/20
new Date().toLocaleTimeString() // 下午3:25:53
new Date().toUTCString() // Mon, 20 Dec 2021 07:26:39 GMT

5.1.3 日期/时间组件方法


5.2 RegExp

  • g:全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。
  • i:不区分大小写,表示在查找匹配时忽略 pattern和字符串的大小写。
  • m:多行模式,表示查找到一行文本末尾时会继续查找。
  • y:粘附模式,表示只查找从 lastIndex开始及之后的字符串。
  • u:Unicode 模式,启用 Unicode 匹配。
  • s:dotAll模式,表示元字符.匹配任何字符(包括\n 或\r)。
1.字面量
2.RegExp 构造函数:所有元字符都必须二次转义,包括转义字符序列,如\n(\转义后的字符串是\\,在正则表达式字符串中则要写成\\\\)
|字面量模式|对应的字符串|
|/\[bc\]at/|"\\[bc\\]at"|
|/\w\\hello\\123/|"\\w\\\\hello\\\\123"|

5.2.1 RegExp 实例属性

每个 RegExp 实例都有下列属性,提供有关模式的各方面信息。
 global:布尔值,表示是否设置了 g 标记。
 ignoreCase:布尔值,表示是否设置了 i 标记。
 unicode:布尔值,表示是否设置了 u 标记。
 sticky:布尔值,表示是否设置了 y 标记。
 lastIndex:整数,表示在源字符串中下一次搜索的开始位置,始终从 0 开始。
 multiline:布尔值,表示是否设置了 m 标记。
 dotAll:布尔值,表示是否设置了 s 标记。
 source:正则表达式的字面量字符串(不是传给构造函数的模式字符串),没有开头和结尾的斜杠。
 flags:正则表达式的标记字符串。始终以字面量而非传入构造函数的字符串模式形式返回(没有前后斜杠)。

5.2.2 RegExp 实例方法

1.exec:如果找到了匹配项,则返回包含第一个匹配信息的数组;如果没找到匹配项,则返回null。返回的数组虽然是 Array 的实例,但包含两个额外的属性:index 和 input。index 是字符串中匹配模式的起始位置,input 是要查找的字符串。

let text = "mom and dad and baby";
let pattern = /mom( and dad( and baby)?)?/gi;
let matches = pattern.exec(text);
console.log(matches.index); // 0
console.log(matches.input); // "mom and dad and baby"
console.log(matches[0]); // "mom and dad and baby"
console.log(matches[1]); // " and dad and baby"
console.log(matches[2]); // " and baby"

调用 exec()后找到了一个匹配项。因为整个字符串匹配模式,所以 matchs数组的 index 属性就是 0,。数组的第一个元素是匹配的整个字符串,第二个元素是匹配第一个捕获组的字符串,第三个元素是匹配第二个捕获组的字符串.
2.如果模式设置了全局标记,则每次调用 exec()方法会返回一个匹配的信息。如果没有设置全局标记,则无论对同一个字符串调用多少次 exec(),也只会返回第一个匹配的信息
3.如果模式设置了粘附标记 y,则每次调用 exec()就只会在 lastIndex 的位置上寻找匹配项(后面即使有匹配的也不找)。粘附标记覆盖全局标记。
4.if判断中常用p.test(string)
5.无论正则表达式是怎么创建的,继承的方法 toLocaleString()和 toString()都返回正则表达式的字面量表示,正则表达式的valueOf()方法返回正则表达式本身。

5.2.3 RegExp 构造函数属性

RegExp 构造函数的所有属性都没有任何 Web 标准出处,因此不要在生产环境中使用它们

let text = "this has been a short summer";
let pattern = /(.)hort/g;
if (pattern.test(text)) { console.log(RegExp.input); // this has been a short summer console.log(RegExp.leftContext); // this has been a console.log(RegExp.rightContext); // summer console.log(RegExp.lastMatch); // short console.log(RegExp.lastParen); // s console.log(RegExp.$_); // this has been a short summer console.log(RegExp["$`"]); // this has been a console.log(RegExp["$'"]); // summer console.log(RegExp["$&"]); // short console.log(RegExp["$+"]); // s
}

 input 属性中包含原始的字符串。
 leftConext 属性包含原始字符串中"short"之前的内容,rightContext 属性包含"short"
之后的内容。
 lastMatch 属性包含匹配整个正则表达式的上一个字符串,即"short"。
 lastParen 属性包含捕获组的上一次匹配,即"s"。
通过 RegExp. $1~RegExp.$9 来访问,分别包含第 1~9 个捕获组的匹配项

5.2.4 模式局限

5.3 原始值包装类型

ECMAScript 提供了 3 种特殊的引用类型:Boolean、Number 和 String

let s1 = "some text";
let s2 = s1.substring(2);

原始值本身不是对象,因此逻辑上不应该有方法,而实际上这个例子又确实按照预期运行了,第二行访问 s1 时,是以读模式访问的,也就是要从内存中读取变量保存的值。在以读模式访问字符串值的任何时候,后台都会执行以下 3 步:
(1) 创建一个 String 类型的实例;
(2) 调用实例上的特定方法;
(3) 销毁实例。
引用类型与原始值包装类型的主要区别在于对象的生命周期。在通过 new 实例化引用类型后,得到的实例会在离开作用域时被销毁,而自动创建的原始值包装对象则只存在于访问它的那行代码执行期间。

5.3.1 Boolean

永远不要使用Boolean 对象
1.所有对象在布尔表达式中都会自动转换为 true

 console.log(true &&new Boolean(false)); //true && true => true

2.Boolean 对象是 Boolean 类型的实例,在使用instaceof 操作符时返回 true,但对原始值则返回 false

let falseObject = new Boolean(false);
let falseValue = false;
console.log(typeof falseObject); // object
console.log(typeof falseValue); // boolean
console.log(falseObject instanceof Boolean); // true
console.log(falseValue instanceof Boolean); // false

5.3.2 Number

1.toString()方法可选地接收一个表示基数的参数,并返回相应基数形式的数值字符串

console.log(10.toString(2)); // "1010"

2.toFixed()方法返回包含指定小数点位数的数值字符串,如果数值本身的小数位超过了参数指定的位数,则四舍五入

let num = 10.005;
console.log(num.toFixed(2)); // "10.01"

3.toExponential()返回以科学记数法,参数表示结果中小数的位数

let num = 99;
console.log(num.toPrecision(1)); // "1e+2"
console.log(num.toPrecision(2)); // "99"
console.log(num.toPrecision(3)); // "99.0"

4.Boolean 对象是 Boolean 类型的实例,在使用instaceof 操作符时返回 true,但对原始值则返回 false
5.Number.isInteger()方法,用于辨别一个数值是否保存为整数

console.log(Number.isInteger(1)); // true

6.Number.isSafeInteger()鉴别整数是否在这个范围内

console.log(Number.isSafeInteger(-1 * (2 ** 53))); // false
console.log(Number.isSafeInteger(-1 * (2 ** 53) + 1)); // true

5.3.3 String

1.charAt()方法返回给定索引位置的字符,由传给方法的整数参数指定。具体来说,这个方法查找指定索引位置的 16 位码元,并返回该码元对应的字符.

let message = "abcde";
console.log(message.charAt(2)); // "c"

2.charCodeAt()方法可以查看指定码元的字符编码。这个方法返回指定索引位置的码元值,索引以整数指定

let message = "abcde";
// Unicode "Latin small letter C"的编码是 U+0063
console.log(message.charCodeAt(2)); // 99
// 十进制 99 等于十六进制 63
console.log(99 === 0x63);

3.fromCharCode()方法用于根据给定的 UTF-16 码元创建字符串中的字符

String.fromCharCode(0x63) === String.fromCharCode(99) === 'c'

4.既包含单码元字符又包含代理对字符的字符串,使用codePointAt()来代替charCodeAt(),codePointAt()方法可以从指定码元位置识别完整的码点
与 charCodeAt()有对应的 codePointAt()一样,fromCharCode()也有一个对应的 fromCodePoint()。这个方法接收任意数量的码点,
5. normalize()方法对字符串应用上述规范化形式,使用时需要传入表示哪种形式的字符串:“NFD”、“NFC”、“NFKD"或"NFKC”。

let a1 = String.fromCharCode(0x00C5), a2 = String.fromCharCode(0x212B);
console.log(a1.normalize("NFD") === a2.normalize("NFD"));

6.concat(),用于将一个或多个字符串拼接成一个新字符串

let stringValue = "hello ";
let result = stringValue.concat("world", "!");
console.log(result); // "hello world!"
console.log(stringValue); // "hello"

7.slice()、substr()和 substring()。这3个方法都返回调用它们的字符串的一个子字符串,而且都接收一或两个参数。第一个参数表示子字符串开始的位置,第二个参数表示子字符串结束的位置。对 slice()和 substring()而言,第二个参数是提取结束的位置(即该位置之前的字符会被提取出来)。对 substr()而言,第二个参数表示返回的子字符串数量,省略第二个参数都意味着提取到字符串末尾.当某个参数是负值时,这 3 个方法的行为又有不同。比如,slice()方法将所有负值参数都当成字符串长度加上负参数值。而 substr()方法将第一个负参数值当成字符串长度加上该值,将第二个负参数值转换为 0。substring()方法会将所有负参数值都转换为 0
8.indexOf()方法从字符串开头开始查找子字符串,而 lastIndexOf()方法从字符串末尾开始查找子字符串,这两个方法都可以接收可选的第二个参数,表示开始搜索的位置
9.startsWith()、endsWith()和 includes()。这些方法都会从字符串中搜索传入的字符串,并返回一个表示是否包含的布尔值.startsWith()和 includes()方法接收可选的第二个参数,表示开始搜索的位置。如果传入第二个参数,则意味着这两个方法会从指定位置向着字符串末尾搜索,忽略该位置之前的所有字符。
10.trim()方法删除前、后所有空格符,再返回结果;trimLeft()和 trimRight()方法分别用于从字符串开始和末尾清理空格符.
11.repeat()方法接收一个整数参数,表示要将字符串复制多少次,然后返回拼接所有副本后的结果.
12. padStart()和 padEnd()方法会复制字符串,如果小于指定长度,则在相应一边填充字符,直至满足长度条件。这两个方法的第一个参数是长度,第二个参数是可选的填充字符串,默认为空格.可选的第二个参数并不限于一个字符。如果提供了多个字符的字符串,则会将其拼接并截断以匹配指定长度。此外,如果长度小于或等于字符串长度,则会返回原始字符串。
13. 字符串可迭代和解构.
14. toLowerCase()和toUpperCase()方法是原来就有的方法,与 java.lang.String 中的方法同名。toLocaleLowerCase()和 toLocaleUpperCase()方法旨在基于特定地区实现。
15. match()方法返回的数组第一个元素是与整个模式匹配的字符串,其余元素则是与表达式中的捕获组匹配的字符串(如果有的话)。search()方法返回模式第一个匹配的位置索引,如果没找到则返回-1,始终从字符串开头向后匹配模。 replace()方法接收两个参数,第一个参数可以是一个 RegExp 对象或一个字符串(这个字符串不会转换为正则表达式),第二个参数可以是一个字符串或一个函数。如果第一个参数是字符串,那么只会替换第一个子字符串。全局替换用g。

let text = "cat, bat, sat, fat";
result = text.replace(/(.at)/g, "word ($1)");
console.log(result); // word (cat), word (bat), word (sat), word (fat)

replace()的第二个参数可以是一个函数。在只有一个匹配项时,这个函数会收到 3 个参数:与整个模式匹配的字符串、匹配项在字符串中的开始位置,以及整个字符串。
split()方法会根据传入的分隔符将字符串拆分成数组,作为分隔符的参数可以是字符串,也可以是 RegExp 对象。还可以传入第二个参数,即数组大小,确保返回的数组不会超过指定大小
16.localeCompare()方法
 如果按照字母表顺序,字符串应该排在字符串参数前头,则返回负值。(通常是-1,具体还要看与实际值相关的实现。)
 如果字符串与字符串参数相等,则返回 0。
 如果按照字母表顺序,字符串应该排在字符串参数后头,则返回正值。(通常是 1,具体还要看与实际值相关的实现。)

5.4 单例内置对象

5.4.1 Global

1.URL 编码方法
encodeURI()不会编码属于 URL 组件的特殊字符,比如冒号、斜杠、问号、井号,而 encodeURIComponent()会编码它发现的所有非标准字符。decodeURI()只对使用 encodeURI()编码过的字符解码。例如,%20 会被替换为空格,但%23 不会被替换为井号(#),因为井号不是由 encodeURI()替换的。类似地,decodeURIComponent()解码所有被 encodeURIComponent()编码的字符,基本上就是解码所有特殊值。
2.eval禁用
3. window 对象
浏览器对global的实现

5.4.2 Math

1.Math 对象属性

2.min()和 max()方法用于确定一组数值中的最小值和最大值
3.舍入方法
Math.ceil()方法始终向上舍入为最接近的整数
Math.floor()方法始终向下舍入为最接近的整数。
Math.round()方法执行四舍五入
Math.fround()方法返回数值最接近的单精度(32 位)浮点值表示
4.Math.random()方法返回一个 0~1 范围内的随机数,其中包含 0 但不包含 1
如果是为了加密而需要生成随机数(传给生成器的输入需要较高的不确定性),那么建议使用 window.crypto.getRandomValues()

js高级程序设计(第五章)相关推荐

  1. JS高级程序设计第五章读书笔记

    1.引用类型的值(对象)是引用类型的一个实例.在ES中,引用类型是一种数据结构,用于将数据和功能组织在一起.它们也长被称为类,但这并不妥当.因为ES在技术层面上是一门面对对象的语言,但它并不具备传统的 ...

  2. JavaScript高级程序设计---第五章 基本引用类型

    第五章 基本引用类型 本章内容 理解对象 基本JavaScript 数据类型 原始值与原始值包装类型 引用值(或者对象)是某个特定引用类型的实例. 对象被认为是某个特定引用类型的实例.新对象通过使用n ...

  3. 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

    5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对 ...

  4. Js高级程序设计第三版学习(十二章)

                                  Js高级程序设计第三版学习(十二章) 第十二章 DOM2和DOM3   1.样式: 访问样式属性 任何支持style特性的HTML元素都有一 ...

  5. 《Ext JS 高级程序设计》的目录与样张

    第一部分 Ext Core 第1 章 Ext Core 重要概念 ············· 2 1.1 Ext.Element······························· 2 1. ...

  6. Ext JS高级程序设计

    Ext JS高级程序设计 图书详细情况查看: http://www.china-pub.com/193076 市场价 :¥59.00 会员价 : ¥44.25(75折) [作 者]黄灯桥;徐会生 [同 ...

  7. 读js高级程序设计中有感

    我现在都到js高级程序设计最难的章节,第六章,对象,虽然有人推荐不用全部读完,但我还是完整的读一遍吧,一遍可以敲代码一边看书理解加百度,我认为这种方式很好,可以加深理解增强印象,这是我觉得这本书比JS ...

  8. JS高级程序设计——阅读笔记四

    JS高级程序设计--阅读笔记四 第六章 集合引用类型 6.1 Object 6.2 Array 6.2.1 创建数组 from()函数 6.2.2 数组空位 6.2.3 数组索引 6.2.4 检测数组 ...

  9. 《JavaScript高级程序设计》五、引用类型(基本包装类型)

    <JavaScript高级程序设计>五.引用类型(基本包装类型) 目录: Boolean类型 Number类型 String类型 字符方法 字符位置方法 字符操作方法 字符大小转换方法 字 ...

  10. java程序设计汇报ppt_Java程序设计第五章.ppt

    Java程序设计第五章.ppt (865 KB) "原资料包共包含10个文件" 内容提供者: ***** 下载风险提示 若需要下载,请务必先预览(下载的文件和预览的文件一致) 由于 ...

最新文章

  1. SQVI和SAP查询QUERY的区别和使用注意事项
  2. JavaSE基础知识(5)—面向对象(5.3访问修饰符)
  3. jquery特效(6)—判断复选框是否选中进行答题提示
  4. python 做界面时如何使图片保持透明背景_Python matplotlib生成图片背景透明的示例代码...
  5. FAST算法学习笔记
  6. K-th Closest Distance
  7. python print_Python print()
  8. python字典攻击
  9. Office之word如何删除页眉横线
  10. 美团 2021 届秋季校园招聘笔试真题
  11. JavaScript Navigator
  12. 雷军内部信:米家有品拆分 做独立电商
  13. 多媒体技术对计算机提出的基本要求是什么,2017年9月计算机应用基础统考押题9计算机多媒体技术...
  14. C语言聊天室项目说明书
  15. 使用NFC tool工具将加密门禁卡写入小米手环步骤详解
  16. 宏基vn7-591g 固态硬盘安装
  17. meso-四(4-吡啶)卟啉TPyrP/四(1-吡啶-羟乙基)卟啉T(4-HEPy)P;紫红色晶体状ZnTPP-Py/5-(4-炔丙氧基苯基)-10,15,20-三苯基锌卟啉
  18. python中的networkx库
  19. 自动洗车APP开发需要满足用户哪些需求
  20. 175Echarts - 象形柱图(Spirits)

热门文章

  1. zepto 自定义打包
  2. 数据产品-产品经理必备的七大文档
  3. spss入门基本用法
  4. Chrome最新离线安装包下载
  5. UE4 Pak 相关知识总结
  6. p5.js之有趣的时钟(码绘2)
  7. 游戏编程--wpe封包教程 (新手必备)
  8. vos怎样能快速安装VOS3000
  9. 如何下载FLASH动画
  10. 感染暴风一号u盘病毒的解决办法