[关闭]
@aymax 2016-07-15T08:36:25.000000Z 字数 6790 阅读 630

第五章 - 引用类型

高设笔记



[TOC]


Object 类型

对象是某个特定引用类型的实例,引用类型是一种数据结构,描述的是一类对象所具有的属性和方法

使用 new 操作符后跟一个构造函数来创建的

  1. var person = new Object();
  2. person.name = "Nicholas";
  3. person.age = 29;

属性名中是可以包含非字母非数字的,但是必须用下面的方括号表示法访问

使用对象字面量表示法,最后一个对象不用加逗号,属性名会自动转换为字符串

  1. var person = {
  2. name : "Nicholas",
  3. 'first name' : "Nicholas",
  4. age : 29
  5. };

如果留空其花括号,则可以定义只包含默认属性和方法的对象

  1. var person = {}; //与 new Object()相同,但不是调用 Object()
  2. person.name = "Nicholas";
  3. person.age = 29;

一般更青睐字面量表示法

  1. function displayInfo(args) {
  2. var output = "";
  3. if (typeof args.name == "string") {
  4. output += "Name: " + args.name + "\n";
  5. }
  6. if (typeof args.age == "number") {
  7. output += "Age: " + args.age + "\n";
  8. }
  9. alert(output);
  10. }
  11. displayInfo({
  12. name: "Nicholas",
  13. age: 29
  14. });
  15. displayInfo({
  16. name: "Greg"
  17. });

对那些必需值使用命名参数,而使用对象字面量来封装多个可选参数

  1. alert(person["name"]); //"Nicholas"
  2. alert(person.name); //"Nicholas"

Array 类型

  1. var colors = new Array(3); // 创建一个包含 3 项的数组
  2. var names = new Array("Greg"); // 创建一个包含 1 项,即字符串"Greg"的数组
  3. var colors = Array(3); // 创建一个包含 3 项的数组
  4. var names = Array("Greg"); // 创建一个包含 1 项,即字符串"Greg"的数组
  5. var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
  6. var names = []; // 创建一个空数组
  7. var values = [1,2,]; // 不要这样!这样会创建一个包含 2 或 3 项的数组
  8. var options = [,,,,,]; // 不要这样!这样会创建一个包含 5 或 6 项的数组

与对象一样,在使用数组字面量表示法时,也不会调用 Array 构造函数

  1. var arr = [0, 1];
  2. console.log(arr.length); // 2
  3. console.log(arr[2]); // undefined
  4. console.log(arr.length); // 2
  5. arr[3] = 3;
  6. console.log(arr[2]); // undefined
  7. console.log(arr.length); // 4

这个例子中如果初始化 a[3],跳过 a[2],数组长度会变成 4

  1. var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
  2. colors.length = 2;
  3. alert(colors[2]); //undefined

数组的 length 属性不是只读的,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项(新增的每一项都会取得 undefined 值)

  1. var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
  2. alert(colors.toString()); // red,blue,green
  3. alert(colors.valueOf()); // red,blue,green
  4. alert(colors); // red,blue,green
  5. alert(colors.join("||")); //red||green||blue

reduce() 函数数接收 4 个参数:前一个值、当前值、项的索引和数组对象。这 个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第 一个参数是数组的第一项,第二个参数就是数组的第二项,reduceRight() 就是反过来


Date

使用自 UTC(Coordinated Universal Time,国际协调时间)1970 年 1 月 1 日午夜(零时)开始经过 的毫秒数来保存日期

要创建一个日期对象,使用 new 操作符和 Date 构造函数即可,在不传递参数的情况下,新创建的对象自动获得当前日期和时间

  1. // GMT 时间 2000 年 1 月 1 日午夜零时
  2. var y2k = new Date(Date.UTC(2000, 0));
  3. // GMT 时间 2005 年 5 月 5 日下午 5:55:55
  4. var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));
  5. <div class="md-section-divider"></div>

如同模仿 Date.parse()一样,Date 构造函数也会模仿 Date.UTC(),但有一点明显不同:日期 和时间都基于本地时区而非 GMT来创建

  1. // 本地时间 2000 年 1 月 1 日午夜零时
  2. var y2k = new Date(2000, 0);
  3. // 本地时间 2005 年 5 月 5 日下午 5:55:55
  4. var allFives = new Date(2005, 4, 5, 17, 55, 55);
  5. <div class="md-section-divider"></div>
  1. //取得开始时间
  2. var start = Date.now();
  3. //调用函数
  4. doSomething();
  5. //取得停止时间
  6. var stop = Date.now(),
  7. result = stop start;v
  8. <div class="md-section-divider"></div>

在低版本浏览器,可以使用 + 操作符实现

  1. //取得开始时间
  2. var start = +new Date();
  3. //调用函数
  4. doSomething();
  5. //取得停止时间
  6. var stop = +new Date(),
  7. result = stop - start;
  8. <div class="md-section-divider"></div>

RegExp 类型

  1. var expression = / pattern / flags ;
  2. <div class="md-section-divider"></div>

flag

  • g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即 停止;
  • i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
  • m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模 式匹配的项。
  1. /* * 匹配字符串中所有"at"的实例 */
  2. var pattern1 = /at/g;
  3. /* * 匹配第一个"bat"或"cat",不区分大小写 */
  4. var pattern2 = /[bc]at/i;
  5. /* * 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写 */
  6. var pattern3 = /.at/gi;
  7. <div class="md-section-divider"></div>

元字符必须转义

( [ { \ ^ $ | ) ? * + .]}

  1. /*
  2. * 匹配第一个"bat"或"cat",不区分大小写
  3. */
  4. var pattern1 = /[bc]at/i;
  5. /*
  6. * 匹配第一个" [bc]at",不区分大小写
  7. */
  8. var pattern2 = /\[bc\]at/i;
  9. /*
  10. * 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
  11. */
  12. var pattern3 = /.at/gi;
  13. /*
  14. * 匹配所有".at",不区分大小写
  15. */
  16. var pattern4 = /\.at/gi;
  17. <div class="md-section-divider"></div>

也可以使用构造函数构造,它接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符

  1. /*
  2. * 匹配第一个"bat"或"cat",不区分大小写
  3. */
  4. var pattern1 = /[bc]at/i;
  5. /*
  6. * 与 pattern1 相同,只不过是使用构造函数创建的
  7. */
  8. var pattern2 = new RegExp("[bc]at", "i");

用字符串表示正则表达式的时候要双重转义

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注