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

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

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

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

1.1原始类型(共5种)

boolean      布尔

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

string           字符串

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

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

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

eg  var name="Nicholas";

       var count=25;

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

例子:                                                                 运行结果:

                

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

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 创建对象

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

var object=new Object();

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

举例: var object1=new Object();

           var object2=object1;

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


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操作符以一个对象和一个构造函数为参数。


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操作符并没有读到任何东西,也没有临时对象的创建,于是他说这些值并不属于原始封装类型。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值