JavaScript引用类型

Object类型

创建Object对象有两种方式:

  • new Object()
  • 对象字面量表示法

对象字面量表示法定义对象时,实际上不会调用Object的构造函数(Firefox2及更早版本除外)

Array类型

创建Array对象有两种方式:

  • new Array()
  • 数组字面量表示法

检测数组类型

instanceof操作符的不足:

如果同个WEB页面存在多个框架,框架1里创建一个数组array,在框架2中用instanceof检测数组array,返回结果并不是true,而是false。这是因为array instanceof Array实际上相当于windows1.array instanceof windows2.Array

Array.isArray()方法用来检测某对象是否时数组,它的不足之处是部分浏览器版本不支持该方法。

转换方法

  • 数组转字符串

    toString()toLocalString()valueOf()方法可以将数组转换为字符串,每项以,分隔

  • 自定义分隔符

    join()方法,可以指定字符串的分隔符

重排序

  • 反转数组

    reverse方法

  • sort方法

    该方法默认将每个元素转为字符串比较大小,较小值在前端。它也可以接受一个比较函数:函数接受两个参数,当返回值为-1时,说明前一项值比后一项值小,当返回值为0时,说明前一项值和后一项值相等,当返回值为1时,说明前一项值比后一项值大

操作方法

  • concat

    获取当前数组的副本,并在这个副本末尾添加新元素,返回这个副本数组

  • slice

    返回当前数组的一个子序列数组,起始位置必须传入,结束位置是可选参数

  • splice

    操作数组中间的元素,可以实现删除、插入、替换三中操作。它必须传入起始位置、要删除的元素数量两个参数,插入或替换的内容是可选参数

迭代方法

迭代方法接受两个参数:

  1. 在每一项上运行的函数
  2. 第一个参数函数的执行环境的变量对象

传入的函数接受三个参数:

  1. 数组元素值
  2. 元素在数组中的索引
  3. 数组对象本身

缩小方法

reduce()reduceRight()方法,会迭代数组的所有项,然后构建一个最终返回的值。它接受一或两个参数:

  1. 在每一项上调用的函数
  2. 可选的初始值

被调用的函数接受四个参数:

  1. 前一个值
  2. 当前值
  3. 元素的索引
  4. 数组对象

第一次迭代发生在数组的第二项上,函数返回的任何值都会作为第一个参数自动传给下一项。

Date类型

var date = new Date()

当不传递参数时,新创建的对象自动获得当前日期和时间。如果想指定日期,则需要传入表示该日期的毫秒数。为了简化这一计算过程,ECMAScript提供了两个方法Date.parse()Date.UTC()将特定的日期转换为毫秒数,再通过Date构造函数创建新对象。

var time = new Date(Date.parse("May 25,2018"));
var time2 = new Date(Date.UTC(2018,10,13,23,22,10));

Function类型

定义函数有两种方式:

  • 函数声明

    function sum(arg1,arg2) {
    	body //函数体
    }
    
  • 函数表达式

    var sum = function(args1,arg2) {
    	body //函数体
    };
    

函数声明和函数表达式的差异是解析器读取时间不一样。解析器在执行环境中加载数据时,会率先读取函数声明,并使其在执行任何代码前可用,这称为函数声明提升;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。

函数内部属性arguments和this

  • arguments属性

    它的主要用途是保存函数参数。arguments对象的callee属性,是一个指针,指向拥有这个arguments对象的函数对象。

  • this

    this表示调用当前函数的对象。

apply、call、bind

这三个方法都可以指定this表示的对象,applycall方法会首先指定this表示的对象,然后再执行当前函数;bind方法会创建一个函数的实例,其this值会被绑定到指定的对象上,这个函数不会自动执行,必须再手动调用一次。

基本包装类型

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

当执行流访问到第二行时,首先创建String包装类型的一个实例,然后在实例上调用指定的方法,最后销毁这个实例。

引用类型与基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。

单体内置对象

内置对象指由ECMAScript实现提供的、不依赖宿主环境的对象,这些对象在ECMAScript程序执行前就已经存在了。这意味着开发人员不必显示地实例化内置对象,因为它们已经实例化了

在所有代码执行之前,作用域中就已经存在两个内置对象:GlobalMath。在大多数ECMAScript实现中都不能直接访问Global对象;不过,Web浏览器实现了承担该角色的windows对象。全局变量和函数都是Global对象的属性。

原文地址:https://www.cnblogs.com/weixia-blog/p/9757671.html