对js中的引用类型的理解(1)

来源:互联网 发布:如何推广淘宝店铺 编辑:程序博客网 时间:2024/06/07 00:56

  • 基本理解
  • js原生引用类型
    • Object类型
    • Array类型
    • Date类型
    • RegExp类型
    • Function类型
    • 基本包装类型
  • 单体内置对象

基本理解

引用类型是一种用于将数据和功能组织在一起的数据结构(也常被成为类),引用类型的值(对象)是引用类型的一个实例。


但是js中没有类的概念,因此引用类型也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法。


对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建的,构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。


ECMAScript提供了很多原生引用类型(如:Object),以便开发人员用以实现常见的计算任务

js原生引用类型

Object类型

我们看到的大部分引用类型都是Object类型的实例,Object的实例本身不具备很多功能,单对于在应用程序中存储和传输数据而言,是非常理想的选择。

Array类型

除了Object之外,Array算是js最常用最常用的类型。js中的数组与其他语言的数组都是数据的有序列表,但是,数组的每一项可以保存任何类型的数据

Date类型

js中用于构建日期对象的引用类型

RegExp类型

js通过RegExp类型来支持正则表达式

Function类型

js中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。如:

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

这与使用函数表达式定义函数的方法几乎相差无几:

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

基本包装类型

为了便于操作基本数据类型值,js还提供了3个特殊的引用类型:Boolean、Number、String。这些类型与其他引用类型相似,但有与各自的基本数据类型相应的特殊行为。

注意:

实际上,每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们可以能够调用一些方法来操作这些数据,如:

var s1 = "hello,world";var s2 = s1.substring(2);

尽管如我们所愿,基本类型调用了方法,但是基本类型不是对象,因而从逻辑上讲他们不应该具有方法。
其实,为了实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于一种读取模式,也就是从内存中读取这个字符串的值,而在读取模式中访问字符串时,后台都会自动完成以下处理:

  1. 创建String类型的一个实例
  2. 在实例上调用指定的方法
  3. 销毁这个实例
    经过处理,基本的字符串就变得跟对象一样了
    引用类型与基本包装类型的主要区别就是对象的生存期。使用new创建的引用类型实例,在执行流离开当前作用域之前都一直保存在内存中,而自动创建的基本包装类型的对象,只存在一行代码的执行瞬间,然后立即被销毁。这也意味着我们不能在运行时为基本类型值添加属性和方法

单体内置对象

单体内置对象是由ECMAScript实现提供的,不依赖宿主环境的对象,也就是开发人员不必显示地实例化内置对象,因为它们已经实例化了。如:Object、Array、String。
还有两个内置对象比较重要:Global和Math
实际上全局变量或全局函数是不存在的,所有在全局作用域中定义的属性和函数,都是Global对象的属性。如:parseInt(),parseFloat()都是Global对象的方法。

0 1