引用类型

Wednesday, August 7, 2019

第五章 引用类型

5.1 Object 类型

    1. var person = new object();

    2. var person = {};

    3. var person = { name**:joyage18 }; // 最后一个属性不用加,**

    4. 访问属性一般使用点表示法,但还有方括号语法

      1. person[“name”];
      2. var xName = “name” ; person[xName];
      3. person[“first name”] 如果属性名包括空格或其它点表示法不能表示的字符,可以使用方括号表示法;

5.2 Array 类型

    1. 可以利用 length 添加最后一项,因为最后一项(未添加前)是 length-1。

    2. 检测数组 Array.isArray(数组名);

    3. 转换方法

      1. valueOf()直接传递数组;
      2. toString() 拼接成字符串,用“,”分开;
      3. toLocaleString() 与 toString 相似,会根据本地环境改变,如时间等;
    4. join() 更改分隔符;

    5. 栈方法

      1. push() 可添加多个参数,添加到末尾,返回修改后数组长度;
      2. pop() 移除最后一项,返回移除的项;
    6. 队列方法

      1. shift() 移除第一项,并返回移除项;
      2. unshift() 可添加多个参数,添加到前端,返回修改后数组长度;
    7. reserve() 反转数组顺序 改变原数组

    8. sort() 默认 先调用 toString()方法,比较字符串大小

      1. 添加函数 sort(function{}); 负数在前,正数在后,0 相等;
    9. concat() 合并数组,返回一个新数组;

    10. slice(1,4)提取项 1 是位置,到 4 为止(不包括 4),返回一个新数组; //负数则用 length+上负数;

    11. splice() 删除/插入/替换

      1. splice (1,4) 从位置[1]开始 删除 4 项;
      2. splice(1,0,“a”,”b“) 从位置[1]插入字符串 a,b; // 原先[1]项往后顺延;
      3. splice (1,1,“a”)从位置[1]开始,删除 1 项(自身),在[1]中插入 a;
    12. 位置方法

      1. indexOf(“a”,4) 返回 a 的位置,从[4]开始找;
      2. lastIndexOf(“a”,4) 从后开始查找 ,从[4]开始向前找;;
      3. 查找不到均返回-1;
    13. 迭代方法

      1. every() 运行指定函数,都返回 true,则返回 true;
      2. filter() 返回 true 项组成的数组;
      3. forEach() 每一项都运行指定函数,无返回;
      4. map() 返回 返回结果组成的数组;
      5. some() 有一项返回 true,即返回 true;
    14. 归并方法

      1. reduce() 该方法函数接收四个参数:前一个值,当前值,项的索引,数组;
      2. reduceright() 方向相反;

5.3 Data 类型

    1. var now = new Date();

      1. Date.parse() 根据字符串返回相应毫秒数。字符串直接写入 Date()会自动调用;
      2. Date.UTC() 也返回毫秒数, 年,月(0-11),日,小时数(0-23),分钟数,秒数 (只有年月必须),同样可以自动调用;
    2. Date.now() 返回当前时间毫秒数;

    3. toString 和···Locale··都会返回日期时间,根据浏览器不同;

    4. valueOf 返回毫秒数;

    5. 日期格式化方法:

      1. toDateSrting()———–以特定于实现的格式显示星期几、月、日、年
      2. toTimeString()———–以特定于实现的格式显示时、分、秒、时区
      3. toLocalDateString()—–以特定于地区的格式显示星期几、月、日、年
      4. toLocalTimeString()—–以特定于实现的格式显示时、分、秒
      5. toUTCString()————以特定于实现的格式显示完整的 UTC 日期
  • 5.4RegExp 类型

      1. 正则表达式创建

        1. Perl var exp = / aaa / gi

        2. RegExp 类型 var exp = new RegExp(“aaa”,“gi”); 推荐

          1. 需要双重转义 如/需要表达写为////
      2. 实例属性

        1. exp.global 是否设置了 g 标志 返回 true 或 false;
        2. exp.ignoreCase i 标志
        3. .lastIndex 搜索下一个匹配项字符的位置 //0 开始
        4. .multiline m 标志
        5. ,source 返回字面量的字符串
      3. 实例方法

        1. var matches = exp.exec(字符串) 返回一个数组 为捕获组设计

          1. index 匹配字符串的位置
          2. input 捕获到的字符串
          3. matches[0] 返回第一个匹配项 // 后面()内为匹配项
          4. 每执行一次 exec()方法 lastindex 都会增加
          5. 不添加全局标志(g),找到第一个后就会停止。
        2. var matches = exp.test(字符串)返回布尔值 匹配则返回 true

        3. toString toLocaleString 返回字面量 valueOf 返回正则表达式本身 相同

      4. 构造函数属性

        长属性名 短属性名 说明
        input $_ 最近一次要匹配的字符串
        lastMath $& 最近匹配到的项
        lastParen $+ 最近一次的捕获组
        multiline $* 是否使用多行表达式
        leftContext $`(~的正常) 匹配项前的文本
        rightContext $' 匹配项后的文本
        $1-$9 捕获组 1-9
  • 5.5 Function 类型

      1. 函数实际是对象,每个函数都是 function 类型的实例,而且都具有属性和方法,所以函数名实际上也是一个指向函数对象的指针。

      2. 定义函数的方式

        1. function sum() {}; // 函数声明
        2. var sum = function(){}; //函数表达式
        3. var sum = new function(“”,“”,“”); 最后一项字符串会被看作是函数体,其余都是参数; 不推荐这种写法,用于理解。
      3. 因为函数也是对象,所以函数名只是指针,所以可以 var sum2 = sum;当函数名不加()时,访问的时函数指针,所以此时也可以使用 sum2();

      4. 因为函数名是指针,所以没有重载。

      5. 函数声明会被解析器提升,js 引起第一遍会声明函数并放到顶部,所以函数可以放下面,但函数表达式则不会;

      6. 函数可以作为值传递 function haha(){}; function xixi(haha){};

      7. 函数内部属性,arguments.callee 指向当前函数指针 不建议使用

      8. this 引用的是函数执行的环境对象 (this.name) //o.this.name

      9. arguments.callee.caller 指向调用它的函数

      10. 函数 length 表示函数希望接收的命名函数个数;

      11. prototype 函数包含所有实例方法

      12. apply()和 call() 第一个参数都是作用域,第二个参数是传入参数,apply 可传入数组对象或数组,call 则是单独列举参数。

      13. bind(“this 值”),返回原函数的拷贝,并且可指定 this 值(对象);

5.6 基本包装类型

    1. boolean,number,string 都有各自的基本包装类型(对象),在调用方法时:
  • var a = ‘hahha’;

  • var b = a.substring(2); 按我们的理解,a 是 string 类型,没有对象,没有方法和属性,但实际执行时可以想象成 (但 a 的原内容还在,为什么?)

  • var a = new String(“hahha”);

  • var b=a.substring(2);

  • a = null;

  • 自动创建的基本包装类型与 new 引用类型不同的是生存期,基本包装类型的实例只存在于执行代码的瞬间,随便立即被销毁;

  • a.color = “red”;

  • alert(a.color);

  • 该例子中,就会出现 undefined,因为执行完后就立即销毁了。

    1. 引用类型 Boolean Number String; var a = new String(“hahha”); // 使用 new 调用构造函数传入值

    2. 基本类型和引用类型的值有很大区别,引用类型 typeof 会返回 object,instanceOf 则会返回 true (确定是对象),其中三者都会重写 toString,valueOf , toLocaleString 方法,String 对象均返回字符串,其余 valueOf 会返回基本类型,String 则会返回字符串;

    3. 永远不建议使用 Boolean 对象,不建议使用 Numbber 对象;

    4. number 类型

      1. toFixed(2) 保留几位小数
      2. toExponential() e 表示法(指数表示法)
      3. toPrecision() 用几位数表示
    5. String 类型

      1. charAt() charCodeAt()返回字符编码 直接 a[2] a 是字符串 返回位置 2 的字符
      2. concat() 连接 用+也行
      3. slice() substring() substr() 第一个参数都是开始位置 第二个参数是结束位置(不包括该位置) substr 第二是长度 负数下三者均不同;
      4. indexOf() lastIndexOf() 返回某个字符位置 正反搜索
      5. toLowerCase() toLocaleLowerCase()小写 toUpperCase() toLocaleUpperCase() 大写
      1. 正则表达相关
      1. localeCompare() 字符串对比,按首字母大小对比,大于被对比返回整数,小于负数,等于 0
      2. fromCharCode() 输入字符编码返回字符串;
    6. HTML 方法 不建议使用

5.7 单体内置对象

    1. 单体内置对象指不用实例化,可以直接调用其方法的对象;object array 属于内置对象

    2. Global 对象

      1. uri 编码

        1. encodeURI()不会对本身 URI 特殊字符进行编码 如冒号斜杠,对空格会编码
        2. encodeURIComponent() 会对任何非标准字符进行编码
        3. decodeURI() 相反
        4. decodeURIComponent() 相反
      2. eval()方法 输入字符串即当作代码执行

      3. 属性

      4. window 对象 全局作用域声明的变量和函数,都成为 window 对象的属性。

    3. Math 对象

      1. Math.min/max() 确定数组中的最大和最小
      2. Math.ceil()向上舍入 Math.floor() 向下 Math.round() 四舍五入
      3. Math.random() 随机 0-1;