欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javascript 面向对象精要 第一章 原始类型和引用类型

程序员文章站 2022-03-25 10:28:45
...

第一章 原始类型和引用类型

引言:javascript存在两种类型,原始类型和引用类型。原始类型保存为简单数据值引用类型则保存为对象,其本质是指向内存位置的引用

    其他编程语言用栈储存原始类型,用堆储存引用类型。javascript完全不同:它使用一个变量对象追踪变量的生存期。原始值被直接保存在变量对象内,而引用值作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。

1.1原始类型(共5种)

boolean      布尔

number       数字,值为任何整型或浮点数

string           字符串

null               空类型,该原始类型仅有一个值:null;

undefined    未定义,该原始类型仅有一个值:undefined;

所有原始类型的值都有字面形式。字面形式是不被保存在变量中的值,如姓名或者价格。

eg  var name="Nicholas";

       var count=25;

(1)原始类型的变量直接保存在原始值,当你将原始值赋给另一个变量时,该值将被复制到变量中。

例子:                                                                 运行结果:

 javascript 面向对象精要 第一章 原始类型和引用类型                javascript 面向对象精要 第一章 原始类型和引用类型

本例中,color2 保存了"red"值,虽然color1和color2具有同样的值,但是二者毫无关联,之后再改变color1的值也不会影响color2.因为每个含有原始值的变量使用自己的存储空间,一个变量的改变不会影响到其它变量。存在两个不同的存储地址。

javascript 面向对象精要 第一章 原始类型和引用类型

1.2 鉴别原始类型

(1)使用typeof操作符

值得注意的:console.log(typeof null);         //"object"

所以判断一个值是否为空类型的最佳方法是直接和null比较。用三等号操作符

console.log(undefined==null);   //true

console.log(undefined===null);   //false

因为双等号在比较时,会将变量进行强制转换。

(2)原始方法

虽然字符串、数字、布尔是原始类型,但是他们也拥有方法。特别是字符串有很多方法。

比如 toLowerCase()  charAt()   subString()   toString(16) {将数字转换为16进制数}

1.3 引用类型

对象是引用类型的实例。

对象是属性的无序列表。属性包含键(始终是字符串)和值。如果一个属性的值是函数,它就被称为方法。

(除了函数可以运行外,一个包含数组的属性和一个包含函数的属性没什么区别i)

1.3.1 创建对象

javascript 面向对象精要 第一章 原始类型和引用类型

(1)使用new操作符和构造函数。

var object=new Object();

引用类型不在变量中直接保存对象。所以上例中的object变量实际上并不包含对象的实例,而是指向内存中实际对象所在位置的指针。

举例: var object1=new Object();

           var object2=object1;

这两个变量都指向第一行杯创建的那个对象实例。

javascript 面向对象精要 第一章 原始类型和引用类型

1.3.2 对象引用解除

最佳手段是将对象变量置为null.

   var object1=new Object();

   object1=null;  //dereference

1.3.3 添加删除属性

   举例:    

var object1=new Object();

                      var object2=object1;

                      object1.myproperty="awesom"

                      console.log(object2.myproperty);     // "awesom"

     object1 上增加了myproperty属性,该属性也可以被object2访问,因为object1和object2指向同一个对象。

1.4 内建类型实例化

内建类型有:Array    数组类型

                    Date     日期和时间类型

                    Error     运行期错误类型

                    Function    函数类型

                    Object      通用对象类型

                   RegExp     正则表达式类型

   可以用new来实例化每一个内建引用类型。

1.4.1 字面形式

  内建类型有字面形式。字面形式允许你在不需要使用new操作符和构造函数显式创建对象的情况下生成引用值。

1.4.2 对象和数组字面形式

(1)对象字面形式

var book={

name:"hui"

year:2018

};

属性名字也可以用字符串表示,特别是希望名字中包含空格和其他特殊字符时。

等价写法:

var book=new Object();

book.name="name";

book.year=2018;

(2)数组字面形式

var colors=["red","blue","green"];

等价写法:var colors=new Array("red" ,"blue","green");

1.4.3 函数字面形式

基本上函数都要用字面形式来定义。

function reflect(value){

return value;

}

1.4.4 正则表达式字面形式

 var numbers=/\d+/g;

等价形式:var numbers=new RegExp("\\d+","g");

1.5 访问属性

用 . 和 [] 访问

[] 允许在属性名使用特殊符号,也允许你用变量而不是字符串字面形式来指定访问的属性。

var array =[];

var method ="push";

array[method](12345);

1.6 鉴别引用类型

函数最容易鉴别,用typeof操作符。对其他引用类型使用typeof,返回"object"

所以鉴别引用类型用instanceof操作符。instanceof操作符以一个对象和一个构造函数为参数。

javascript 面向对象精要 第一章 原始类型和引用类型

1.7 鉴别数组

鉴别数组可以用instanceof操作符。但是有一个例外会影响网页开发:javascript的值可以在同一个网页的不同框架之间传输。

ECMAscript引入了Array.isArray().

1.8 原始封装类型

原始封装类型一共有三种 String  Number Boolean

当读取字符串、数字或布尔值时,原始封装类型将自动被创建,但这些临时对象在使用它们的语句结束时就立刻被销毁.

var name="hui";
hui.last="wang";
console.log(name.last);      //undefined

另外,虽然原始封装类型会被自动创建,但是在这些值上进行instanceof操作,对应类型的返回值都是false。

这是因为临时对象仅在值读取时被创建,instanceof操作符并没有读到任何东西,也没有临时对象的创建,于是他说这些值并不属于原始封装类型。