JavaScript引用类型
在JavaScript中由于变量存储方式的不同所以变量分为两类
原始值类型和引用值类型。
原始值:
存储在栈(stack)中。值直接存在变量访问的地方。
引用值:
存储在堆(heap)中。存储在变量处的是一个地址,指向内存中的一小块空间。
值大多数是一个对象类型Object类型
什么是引用类型
引用类型的值(对象)是引用类型的一个实例。
引用类型是一种数据结构,用于将数据和功能组织在一起
什么是Object类型
引用类型的值往往是一个对象。这个对象就是Object类型。换句话说
引用类型的值也是Object类型的实例。
Object类型
Object类型——对象
对象为可包含基本和数组数据的组合类型,对象成员作为对象属性,对象的成员函数最为对象的方法。
Object对象的创建两种方式
new var person = new Object();
字面量 var person = {}
Object的成员获取
对象.属性
删除Object对象
null
eg:对象的创建
<script>
var obj = new Object();
obj.name='blue';
obj.qq=1234123;
obj.showName=function(){
alert(this.name);
};
obj.showQQ=function(){
alert(this.qq);
}
obj.showName();obj.showQQ();
</script>
eg:对象的消除,在js里对于对象有回收机制,没用的对象js会自动释放资源,
但也可以强制消除对象。使用null
var obj = new Object();
obj.name = 'hello';
alert(obj);
obj = null;
alert(obj)
基本包装类型
为了便于操作基本类型的值,ECMAScipt还提供了3个特殊的引用类型。
Boolean,Number,String,注意是大写。
我们来看一个问题
var s1 = 'hello';
var s2 = s1.substring(2);
我们在原始值类型一课中知道,原始值类型即基本类型是不应该包含方法的。
例子中s1包含一个字符串,字符串是基本类型,而下一行调用了s1.substring()
方法,并将返回的结果保存在s2中。基本类型不是对象,它不应该有方法。其实
为了让我们实现这种直观的操作,后台已经自动完成了一系列处理。
1:创建Strign类型的实例
2:在实例上调用指定的方法。
3:销毁实例
代码如下:
1:var s1 = new String('hello');
var s2 = s1.substring(2);
a1 = null;
经过这番处理,基本类型的字符串就变得和对象一样了。上面三个步骤也适用
Booolean,Number
如果我们想为s1添加属性
var s1 = 'hello';
s1.color = 'red';
alert(s1.color)//undefined
这是因为自动创建的基本包装类型的对象只存在一行代码执行的瞬间。然后立即被消除。
如果希望添加属性则可以使用显示创建包装类型。
不过我们在不必要的情况下尽量不要使用显示创建基本包装类,这种做法很容易
让人分不清在处理基本类型还是引用类型。
var s1 = new String('hello');
s1.color = 'red';
alert(s1.color)//red
typeof s1 //object
——总结——
限于文章篇幅原因,这里仅仅介绍冰山一角。由于笔者的水平有限,编写时间也很仓促,
文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正
在JavaScript中由于变量存储方式的不同所以变量分为两类
原始值类型和引用值类型。
原始值:
存储在栈(stack)中。值直接存在变量访问的地方。
引用值:
存储在堆(heap)中。存储在变量处的是一个地址,指向内存中的一小块空间。
值大多数是一个对象类型Object类型
什么是引用类型
引用类型的值(对象)是引用类型的一个实例。
引用类型是一种数据结构,用于将数据和功能组织在一起
什么是Object类型
引用类型的值往往是一个对象。这个对象就是Object类型。换句话说
引用类型的值也是Object类型的实例。
Object类型
Object类型——对象
对象为可包含基本和数组数据的组合类型,对象成员作为对象属性,对象的成员函数最为对象的方法。
Object对象的创建两种方式
new var person = new Object();
字面量 var person = {}
Object的成员获取
对象.属性
删除Object对象
null
eg:对象的创建
<script>
var obj = new Object();
obj.name='blue';
obj.qq=1234123;
obj.showName=function(){
alert(this.name);
};
obj.showQQ=function(){
alert(this.qq);
}
obj.showName();obj.showQQ();
</script>
eg:对象的消除,在js里对于对象有回收机制,没用的对象js会自动释放资源,
但也可以强制消除对象。使用null
var obj = new Object();
obj.name = 'hello';
alert(obj);
obj = null;
alert(obj)
更多详细Object将在就JavaScript高级篇ooad一节中详细道来。
基本包装类型
为了便于操作基本类型的值,ECMAScipt还提供了3个特殊的引用类型。
Boolean,Number,String,注意是大写。
我们来看一个问题
var s1 = 'hello';
var s2 = s1.substring(2);
我们在原始值类型一课中知道,原始值类型即基本类型是不应该包含方法的。
例子中s1包含一个字符串,字符串是基本类型,而下一行调用了s1.substring()
方法,并将返回的结果保存在s2中。基本类型不是对象,它不应该有方法。其实
为了让我们实现这种直观的操作,后台已经自动完成了一系列处理。
1:创建Strign类型的实例
2:在实例上调用指定的方法。
3:销毁实例
代码如下:
1:var s1 = new String('hello');
var s2 = s1.substring(2);
a1 = null;
经过这番处理,基本类型的字符串就变得和对象一样了。上面三个步骤也适用
Booolean,Number
如果我们想为s1添加属性
var s1 = 'hello';
s1.color = 'red';
alert(s1.color)//undefined
这是因为自动创建的基本包装类型的对象只存在一行代码执行的瞬间。然后立即被消除。
如果希望添加属性则可以使用显示创建包装类型。
不过我们在不必要的情况下尽量不要使用显示创建基本包装类,这种做法很容易
让人分不清在处理基本类型还是引用类型。
var s1 = new String('hello');
s1.color = 'red';
alert(s1.color)//red
typeof s1 //object
——总结——
限于文章篇幅原因,这里仅仅介绍冰山一角。由于笔者的水平有限,编写时间也很仓促,
文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正