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操作符并没有读到任何东西,也没有临时对象的创建,于是他说这些值并不属于原始封装类型。
上一篇: CVE-2019-9762漏洞复现
下一篇: Python中针对函数处理的特殊方法
推荐阅读
-
ECMAScript5面向对象技术(1)--原始类型和引用类型
-
JavaScript对象内置对象,值类型和引用类型讲解
-
ECMAScript5面向对象技术(1)--原始类型和引用类型
-
面向对象unit02,重载,类和public,构造方法。this,引用类型数组
-
JavaScript对象内置对象,值类型和引用类型讲解
-
声明函数立即执行函数及匿名函数,以及函数的简写,和查看数据类型的原始类型以及以数组及对象的引用类型,函数类型的应用场景目前稀里糊涂
-
声明函数立即执行函数及匿名函数,以及函数的简写,和查看数据类型的原始类型以及以数组及对象的引用类型,函数类型的应用场景目前稀里糊涂
-
javascript 面向对象精要 第一章 原始类型和引用类型