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

原创 2015年11月18日 17:07:55

基本理解

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


但是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对象的方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

JS中值类型与引用类型分析

JavaScript中的值类型与引用类型 数据类型 值/引用类型 备注 undefined 值类型 无值 number 值类型 boolean 值类型 ...
  • SimonITer
  • SimonITer
  • 2016年08月10日 20:30
  • 1507

js--引用类型Array--3.数组简单复制和深度复制

js数组也是很重要的一块,所以准备对数组的操作等写一个系列。 1.第一部分是二元数组的基础知识。 http://blog.csdn.net/github_34514750/article/de...
  • github_34514750
  • github_34514750
  • 2017年02月23日 18:33
  • 3305

java基本数据类型传递与引用传递区别详解

java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是java中的方法参数,那么我们先来回顾一下在程序设计语言中有关参数...
  • javazejian
  • javazejian
  • 2016年04月19日 17:12
  • 13930

JS基本类型和引用类型赋值的区别

基本类型包括:number,string,boolean,null,undefined 引用类型包括:Object,Array,Date,RegExp,Function 通过代码来看他们的区别: ...
  • lxiang222
  • lxiang222
  • 2017年04月07日 18:55
  • 756

我对JS的继承的理解

js的原型继承原型链是实现js继承的主要方法,他的原理是让利用原型让一个引用类型继承另一个引用类型的属性和方法。如果我们让一个原型对象等于一个实例,那么,此时的原型对象将包含指向另一个原型的指针假如另...
  • jyd820226378
  • jyd820226378
  • 2016年07月19日 19:19
  • 1190

JavaScript原始类型和引用类型

引子理解和使用对象是理解整个 JavaScript 的关键JavaScript 把对象作为语言的中心,几乎所有的 JavaScript 的数据要么是一个对象要么是从对象中获取。我们可以在任何时候创建对...
  • qq_20974467
  • qq_20974467
  • 2015年10月23日 09:43
  • 1286

【JavaScript】引用类型

引用类型是一种数据结构,用于将数据和功能组织在一起,相当于Java的类。 对象是某个特定应用类型的实例。1、Object类型2、Array类型(1)创建数组 1、使用Array构造函数 var ...
  • XIAOZHUXMEN
  • XIAOZHUXMEN
  • 2016年06月11日 10:59
  • 669

深入解析js中基本数据类型与引用类型,函数参数传递的区别

ECMAScript的数据有两种类型:基本类型值和引用类型值,基本类型指的是简单的数据段,引用类型指的是可能由多个值构成的对象。 Undefined、Null、Boolean、Number和Strin...
  • wkyseo
  • wkyseo
  • 2016年05月23日 20:30
  • 3277

JavaScript基础——引用类型(三)Function类型

在ECMAScript中函数实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定...
  • Goskalrie
  • Goskalrie
  • 2016年05月30日 17:27
  • 3301

JavaScript基本类型和引用类型的值

JS变量可能包含两种不同数据类型的值;基本类型值和引用类型值。基本类型指的是简单的数据段,而引用类型值那些由多个值构成的对象; 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。J...
  • liaodehong
  • liaodehong
  • 2015年11月01日 21:35
  • 2462
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对js中的引用类型的理解(1)
举报原因:
原因补充:

(最多只允许输入30个字)