ECMAScript引用类型简要笔记

1. Object

  1. 可以通过对象字面量的方式定义
  2. 通过方括号或者.号进行访问

2. Array

  1. 数组内部数据类型可以不同,大小可以动态调整
  2. 使用方括号表示法或者构造函数创建
  3. length属性记录数组项数, 它不是只读的,可以通过设置该值,从数组末尾添加或者移除项
  4. toString()方法:调用数组每一项的toString()方法, 默认以逗号连接, 构成一个字符串. join()方法,可以使用指定的分隔符来构建这个字符串.
  5. 栈方法: push()&pop() 对数组尾部进行操作
  6. 队列方法: push()&shift() vs pop()&unshift()
  7. 排序: sort()&reverse,对源数组进行排序并返回. sort()默认调用每项的toString()方法,将转型后的字符串排序,也可以接受一个函数作为比较方法. reverse()反转数组
  8. concat()方法,用于连接数组, 该方法不影响被调用者. 返回连接后的数组.
  9. slice():切片操作,希望接受两个参数,不改变原始数组, 返回切片结果数组
  10. splice(): 铰接 splice(start, num, new1, new2, ...), 从start位置开始删除num项, 并插入后面的参数new1, new2 …
  11. indexOf()&lastIndexOf()从数组前/后(方向)查找第一个参数的位置, 返回第一个找到的位置,否则返回-1, 可以指定搜索起点,作为第二个参数.
  12. 迭代方法
    • every(): 每一项返回ture,则返回true
    • filter(): 返回true的项组成数组作为返回值
    • forEach(): 没有返回值
    • map(): 返回每次调用结果组成的数组
    • some(): 对任一项返回true, 则返回true

3. Date

4. RegExp

  1. 使用字面量或者RegExp()构造函数定义正则表达式, RegExp()接受两个字符串: 模式和标志
  2. 实例属性
    • global : 是否设置了g标志
    • ignoreCase :是否设置了i标志
    • lastIndex : 下次搜索的起始位置
    • multiline : 是否设置了m标志
    • source : 正则表达式的字面量(字符串类型的)
  3. 实例方法
    • exec() 返回第一个匹配项信息的数组, 非全局模式下,每次调用后,正则表达式的lastIndex都会重置, 全局模式下会保留.
    • test() 判断目标字符串与某个模式是否匹配
    • toString()返回正则表达式字面量(source属性)

5. Function

JavaScript中的函数是对象,可以通过Function()构造函数来生成函数.

函数是对象,函数名是指针 , 因此JavaScript中的函数没有重载, 一个函数名只能指向一个函数对象, 后面的函数会覆盖前面的.

function sum(num1, num2) {
return num1 + num2;
}

var sum = function (num1, num2) {
return num1 + num2;
}

函数声明和函数表达式是定义函数常用的两种方法, 两者的区别是: 函数声明存在函数声明提升的过程.

函数内部属性

  • arguments 类数组对象,包含着函数中所有参数, 它又一个名为callee的属性,指向拥有着arguments对象的函数.
  • this

函数属性

  • length 函数希望接收的命名参数个数
  • prototype 原型对象, 函数的原型对象不可枚举,不能用for-in发现

函数方法

  • apply() 接受两个参数:在其中运行函数的作用域, 参数数组
  • call() 与apply类似, 只是他的参数是逐个传入,而不是通过数组

apply()call()能够扩充函数赖以运行的作用域

6. 基本包装类型

Boolean,Number, String, 与前面介绍的引用类型相似,同时具有各自的基本类型相应的特殊行为。

每当读取一个基本类型值的时候, 后台会创建一个对应的对象,从而让我们能够调用一些方法来操作数据。

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

读取模式中访问字符串,后台会自动完成以下处理:

  • 创建String类型的一个实例
  • 在实例上调用指定的方法
  • 销毁这个实例

引用类型与基本包装类型主要区别在于对象的生存期,使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前一直都保存在内存中, 而自动创建的基本类型的对象, 则只存在于一行代码的执行瞬间,然后就被销毁。

var value = "25";
var number = Number(value);
var num = 25;
console.log(typeof num); // "number"
console.log(typeof number); // "number"

var obj = new Number(value);
console.log(obj); // "object"

转型函数生成的是简单类型, new操作符得到的是对象

不建议显式地创建基本包装类型的对象

Boolean 对象

var falseObject = new Boolean(false);
console.log(falseObject && true); // true
var bool = Boolean(falseObject); // true

注意这里的值为false的Boolean对象,转换为Boolean类型,对应的是true, 建议永远不要使用Boolean对象

Number 对象

String 对象

参考资料:

  • JavaScript 高级程序设计