JavaScript高级程序设计(4)
第5章 基本引用类型
### 5.1 Date - 要创建日期对象,使用 new 操作符来调用 Date 构造函数: ```javascript let now = new Date(); ``` - 日期对比 ```javascript let date1 = new Date(2019, 0, 1); // 2019 年 1 月 1 日 let date2 = new Date(2019, 1, 1); // 2019 年 2 月 1 日 console.log(date1 < date2); // true console.log(date1 > date2); // false ``` - 日期格式化方法 - `toDateString()` 显示日期中的周几、月、日、年(格式特定于实现); - `toTimeString()` 显示日期中的时、分、秒和时区(格式特定于实现); - `toLocaleDateString()` 显示日期中的周几、月、日、年(格式特定于实现和地区); - `toLocaleTimeString()` 显示日期中的时、分、秒(格式特定于实现和地区); - `toUTCString()`显示完整的 UTC 日期(格式特定于实现) - 日期/时间组件方法 - `getTime()` 返回日期的毫秒表示;与 valueOf()` 相同 - `setTime(milliseconds)` 设置日期的毫秒表示,从而修改整个日期 - `getFullYear()` 返回 4 位数年(即 2019 而不是 19) - `getUTCFullYear()` 返回 UTC 日期的 4 位数年 - `setFullYear(year)` 设置日期的年(year 必须是 4 位数) - `setUTCFullYear(year)` 设置 UTC 日期的年(year 必须是 4 位数) - `getMonth()` 返回日期的月(0 表示 1 月,11 表示 12 月) - `getUTCMonth()` 返回 UTC 日期的月(0 表示 1 月,11 表示 12 月) - `setMonth(month)` 设置日期的月(month 为大于 0 的数值,大于 11 加年) - `setUTCMonth(month)` 设置 UTC 日期的月(month 为大于 0 的数值,大于 11 加年) - `getDate()` 返回日期中的日(1~31) - `getUTCDate()` 返回 UTC 日期中的日(1~31) - `setDate(date)` 设置日期中的日(如果 date 大于该月天数,则加月) - `setUTCDate(date)` 设置 UTC 日期中的日(如果 date 大于该月天数,则加月) - `getDay()` 返回日期中表示周几的数值(0 表示周日,6 表示周六) - `getUTCDay()` 返回 UTC 日期中表示周几的数值(0 表示周日,6 表示周六) - `getHours()` 返回日期中的时(0~23) - `getUTCHours()` 返回 UTC 日期中的时(0~23) - `setHours(hours)` 设置日期中的时(如果 hours 大于 23,则加日) - `setUTCHours(hours)` 设置 UTC 日期中的时(如果 hours 大于 23,则加日) - `getMinutes()` 返回日期中的分(0~59) - `getUTCMinutes()` 返回 UTC 日期中的分(0~59) - `setMinutes(minutes)` 设置日期中的分(如果 minutes 大于 59,则加时) - `setUTCMinutes(minutes)` 设置 UTC 日期中的分(如果 minutes 大于 59,则加时) - `getSeconds()` 返回日期中的秒(0~59) - `getUTCSeconds()` 返回 UTC 日期中的秒(0~59) - `setSeconds(seconds)` 设置日期中的秒(如果 seconds 大于 59,则加分) - `setUTCSeconds(seconds)` 设置 UTC 日期中的秒(如果 seconds 大于 59,则加分) - `getMilliseconds()` 返回日期中的毫秒 - `getUTCMilliseconds()` 返回 UTC 日期中的毫秒 - `setMilliseconds(milliseconds)` 设置日期中的毫秒 - `setUTCMilliseconds(milliseconds)` 设置 UTC 日期中的毫秒 - `getTimezoneOffset()` 返回以分钟计的 UTC 与本地时区的偏移量 >更多[参考文档](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date "参考文档") ### 5.2 RegExp - 5.2.1 匹配模式标记 - `g:`全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。 - `i:`不区分大小写,表示在查找匹配时忽略 pattern 和字符串的大小写。 - `m:`多行模式,表示查找到一行文本末尾时会继续查找。 - `y:`粘附模式,表示只查找从 lastIndex 开始及之后的字符串。 - `u:`Unicode 模式,启用 Unicode 匹配。 - `s:`dotAll 模式,表示元字符.匹配任何字符(包括\n 或\r)。 - 例子 ```javascript // 匹配字符串中的所有"at" let pattern1 = /at/g; // 匹配第一个"bat"或"cat",忽略大小写 let pattern2 = /[bc]at/i; // 匹配所有以"at"结尾的三字符组合,忽略大小写 let pattern3 = /.at/gi; ``` - 5.2.2 RegExp 实例属性 - global:布尔值,表示是否设置了 g 标记。 - ignoreCase:布尔值,表示是否设置了 i 标记。 - unicode:布尔值,表示是否设置了 u 标记。 - sticky:布尔值,表示是否设置了 y 标记。 - lastIndex:整数,表示在源字符串中下一次搜索的开始位置,始终从 0 开始。 - multiline:布尔值,表示是否设置了 m 标记。 - dotAll:布尔值,表示是否设置了 s 标记。 - source:正则表达式的字面量字符串(不是传给构造函数的模式字符串),没有开头和结尾的 - 斜杠。 - flags:正则表达式的标记字符串。始终以字面量而非传入构造函数的字符串模式形式返回(没有前后斜杠) - 例子 ```javascript let pattern1 = /\[bc\]at/i; console.log(pattern1.global); // false console.log(pattern1.ignoreCase); // true console.log(pattern1.multiline); // false console.log(pattern1.lastIndex); // 0 console.log(pattern1.source); // "\[bc\]at" console.log(pattern1.flags); // "i" ``` - 5.2.3 RegExp 实例方法 - RegExp 实例的主要方法是 exec(),主要用于配合捕获组使用。 - 这个方法只接收一个参数,即要应用模式的字符串。如果找到了匹配项,则返回包含第一个匹配信息的数组;如果没找到匹配项,则返回null。 - 返回的数组虽然是 Array 的实例,但包含两个额外的属性:index 和 input。index 是字符串中匹配模式的起始位置,input 是要查找的字符串。 - 例子 ```javascript 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" ``` - 5.2.4 RegExp 构造函数属性  ### 5.3 原始值包装类型 使用原始值的包装类型可以 new 出来(Boolean String Number),但是这时候 typeof 就是 object 了,调用一些基础数据类型的方法时,引擎后台会自动转化成包装类型并调用函数,但是这些玩意在前台是看不见的,运行完后引擎后台就会销毁. ```javascript let strObj = new String('will'); console.log(typeof strObj) // object let str = 'will' console.log(str.length) // 4 引擎后台会自动转化成 string 的包装类型再调用属性,但是这玩意开发者看不见 ``` ##### 5.3.1 Boolean Boolean 是对应布尔值的引用类型。要创建一个 Boolean 对象,就使用 Boolean 构造函数并传入true 或 false,如下例所示: ```javascript let booleanObject = new Boolean(true); ``` ##### 5.3.2 Number Number 是对应数值的引用类型。要创建一个 Number 对象,就使用 Number 构造函数并传入一个数值,如下例所示: ```javascript let numberObject = new Number(10); ``` ##### 5.3.3 String String 是对应字符串的引用类型。要创建一个 String 对象,使用 String 构造函数并传入一个数值,如下例所示: ```javascript let stringObject = new String("hello world"); ``` ### 5.4 单例内置对象 >ECMA-262 对内置对象的定义是“任何由 ECMAScript 实现提供、与宿主环境无关,并在 ECMAScript程序开始执行时就存在的对象”。这就意味着,开发者不用显式地实例化内置对象,因为它们已经实例化好了。前面我们已经接触了大部分内置对象,包括 Object、Array 和 String。本节介绍 ECMA-262定义的另外两个单例内置对象:Global 和 Math。 ##### 5.4.1 Global >前面结束的isNaN()、isFinite()、parseInt()和 parseFloat(),实际上都是 Global 对象的方法 1. URL 编码方法:encodeURI()和 encodeURIComponent() - encodeURI()不会编码属于 URL 组件的特殊字符,比如冒号、斜杠、问号、井号 - encodeURIComponent()会编码它发现的所有非标准字符 2. eval('xxx') 这个方法可以模拟引擎行为,这里面的 xxx 语句会被引擎解析出来插入到对应的位置,这玩意与正常调用代码有相同的作用域链。用这个 api 要防止用户注入错误代码导致系统崩溃~ 3. Global 对象属性 Global 对象有很多属性,像 undefined、NaN 和 Infinity 等特殊值都是 Global 对象的属性。此外,所有原生引用类型构造函数,比如 Object 和 Function,也都是Global 对象的属性。 4. window 对象 虽然 ECMA-262 没有规定直接访问 Global 对象的方式,但浏览器将 window 对象实现为 Global对象的代理。因此,所有全局作用域中声明的变量和函数都变成了 window 的属性。来看下面的例子: ```javascript var color = "red"; function sayColor() { console.log(window.color); } window.sayColor(); // "red" ``` ##### 5.4.2 Math 1. Math 对象属性  2. min()和 max()方法 ```javascript let max = Math.max(3, 54, 32, 16); console.log(max); // 54 let min = Math.min(3, 54, 32, 16); console.log(min); // 3 ``` 3. 舍入方法 - Math.ceil()方法始终向上舍入为最接近的整数。 - Math.floor()方法始终向下舍入为最接近的整数。 - Math.round()方法执行四舍五入。 - Math.fround()方法返回数值最接近的单精度(32 位)浮点值表示。 4. random()方法 Math.random()方法返回一个 0~1 范围内的随机数,其中包含 0 但不包含 1。对于希望显示随机名言或随机新闻的网页,这个方法是非常方便的。可以基于如下公式使用 Math.random()从一组整数中随机选择一个数: ```javascript number = Math.floor(Math.random() * total_number_of_choices + first_possible_value) ``` 5. 其他方法 
顶部
收展
底部
[TOC]
目录
第1章 JavaScript简介
第2章 在 HTML中使用JavaScript
第3章 语言基础(1)语法变量
第3章 语言基础(2)数据类型
第3章 语言基础(3)操作符
第3章 语言基础(4)语句
第4章 变量、作用域与内存
第5章 基本引用类型
第6章 集合引用类型
第7章 迭代器与生成器
第8 章对象、类与面向对象编程
第9章 代理与反射
第10章 函数
第11章 期约与异步函数
第12章 BOM
第13章 客户端检测
第14章 DOM
第15章 DOM 扩展
第16章 DOM2 和 DOM3
第17章 事件
第18章 动画与 Canvas 图形
第19章 表单脚本
第20章 JavaScript API
第21章 错误处理与调试
第22章 处理 XML
第23章 JSON
第24章 网络请求与远程资源
第25章 客户端存储
第26章 模块
第27章 工作者线程
第28章 最佳实践
相关推荐
WebSocket