JavaScript中基本数据类型和包装类型
2017-09-20 21:41
381 查看
原文链接:http://www.jb51.net/article/77549.htm
在JavaScript中,一切皆对象。所以在了解了五种基本类型(http://blog.csdn.net/tt_twilight/article/details/78043078)之后,可能对于基本类型和引用类型的区别产生疑问,这篇文章会帮助你对基本数据类型和它们对应的包装类型的区别有个基本的了解。。。
javascript的数据类型可以分为两种:原始类型和引用类型
原始类型也称为基本类型或简单类型,因为其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈(stack)中(按值访问)。其中,javascript基本数据类型包括Undefined、Null、Boolean、Number和String五种
引用类型由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此其存储在堆(heap)中,存储在变量处的值是一个指针,指向存储对象的内存处(按址访问)
[注意]对于引用类型的值,可以为其添加属性和方法,也可以改变和删除其属性和方法;但基本类型不可以添加属性和方法。
Undefined
Undefined类型只有一个值,就是undefined。当声明的变量未初始化时,该变量的默认值是undefined
对于尚未声明过的变量只能执行一项操作,使用typeof操作符检测其数据类型,但严格模式下会导致错误
typeof(test);//undefined
Null
Null类型只有一个值,就是null。逻辑角度看,null值表示一个空对象指针,如果定义的变量将用于保存对象,最好将该变量初始化为null。实际上undefined值是派生自null值的,所以undefined == null
[注意]null是空对象指针,而[]是空数组,{}是空对象,三者不相同
?
[注意]因为undefined和null不是构造器类型,所以不能添加自定义属性
包装类型
包装类型是特殊的引用类型。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可能调用一些方法来操作这些数据。包装类型共包括Boolean、Number和String三种
?
[注意]引用类型和基本包装类型的主要区别是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着不能在运行时为基本类型值添加属性和方法
?
创建方式
显式创建包装类型共两种方式:
[1]Object方式[不建议使用]
?
[2]构造函数方式[建议使用]
?
[注意]使用new调用基本包装类型的构造函数与直接调用同名的转型函数是不一样的
Boolean
Boolean类型只有两个值:true 和 false。Boolean包装类型是与布尔值对应的引用类型,在布尔表达式中使用Boolean对象容易造成误解
包装类型继承的方法
valueOf():返回基本类型值true 或 false
toString()和toLocaleString():返回字符串'true' 或'false'
Number
javascript只有一种数字类型,既可以表示32位的整数,还可以表示64位的浮点数。
对于基本数据类型的包装对象的理解
现象:为什么可以对字符串的操作采用对象的表示法?
例如:
?
解析:
JavaScript三个基本数据类型都有相应的对象类;分别为Sring,Number,Boolean类;
JavaScript可以灵活的将一种类型的值转换为另一种类型;
当我们在对象环境中使用字符串时,即当我们试图访问这个字符串的属性或方法时;
JavaScript会为这个字符串值内部地创建一个String包装对象;
String对象会暂时代替原始的字符串值,完成我们的访问;
这个被内部创建的String对象是瞬间存在的,它的作用是使我们可以正常访问属性和方法;
String对象在使用过后会被系统丢弃掉;
而原始值并不会被改变;
以上同样适用于数字和布尔值类型;
使用Object()函数,任何数字、字符串、布尔值都可以转换为它对应的包装对象;
例如:
?
在JavaScript中,一切皆对象。所以在了解了五种基本类型(http://blog.csdn.net/tt_twilight/article/details/78043078)之后,可能对于基本类型和引用类型的区别产生疑问,这篇文章会帮助你对基本数据类型和它们对应的包装类型的区别有个基本的了解。。。
javascript的数据类型可以分为两种:原始类型和引用类型
原始类型也称为基本类型或简单类型,因为其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈(stack)中(按值访问)。其中,javascript基本数据类型包括Undefined、Null、Boolean、Number和String五种
引用类型由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此其存储在堆(heap)中,存储在变量处的值是一个指针,指向存储对象的内存处(按址访问)
[注意]对于引用类型的值,可以为其添加属性和方法,也可以改变和删除其属性和方法;但基本类型不可以添加属性和方法。
Undefined
Undefined类型只有一个值,就是undefined。当声明的变量未初始化时,该变量的默认值是undefined
var test;//undefined console.log(test == undefined);//true var test = undefined;//undefined
对于尚未声明过的变量只能执行一项操作,使用typeof操作符检测其数据类型,但严格模式下会导致错误
typeof(test);//undefined
Null
Null类型只有一个值,就是null。逻辑角度看,null值表示一个空对象指针,如果定义的变量将用于保存对象,最好将该变量初始化为null。实际上undefined值是派生自null值的,所以undefined == null
[注意]null是空对象指针,而[]是空数组,{}是空对象,三者不相同
console.log(null== undefined);//true
?
[注意]因为undefined和null不是构造器类型,所以不能添加自定义属性
包装类型
包装类型是特殊的引用类型。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可能调用一些方法来操作这些数据。包装类型共包括Boolean、Number和String三种
vars1 = 'some text'; vars2 = s1.substring(2); //在上述过程中,实际上发生了三个步骤 vars1 = newString('some text');//(1)创建String类型的一个实例 vars2 = s1.substring(2); //(2)在实例上调用指定的方法 s1 = null;//(3)销毁这个实例
?
[注意]引用类型和基本包装类型的主要区别是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着不能在运行时为基本类型值添加属性和方法
vars1 = 'some text'; s1.color = 'red'; alert(s1.color);//undefined
?
创建方式
显式创建包装类型共两种方式:
[1]Object方式[不建议使用]
vars = newObject('abc'); varb = newObject(true); varn = newObject(123);
?
[2]构造函数方式[建议使用]
vars = newString('abc'); varb = newBoolean(true); varn = newNumber(123);
?
[注意]使用new调用基本包装类型的构造函数与直接调用同名的转型函数是不一样的
varvalue = '25'; varnumber = Number(value); console.log(typeofnumber);//number varobj = newNumber(value); console.log(typeofobj);//object
Boolean
Boolean类型只有两个值:true 和 false。Boolean包装类型是与布尔值对应的引用类型,在布尔表达式中使用Boolean对象容易造成误解
包装类型继承的方法
valueOf():返回基本类型值true 或 false
toString()和toLocaleString():返回字符串'true' 或'false'
console.log(typeoftrue.valueOf(),true.valueOf());//boolean true console.log(typeoffalse.valueOf(),false.valueOf());//boolean false console.log(typeoftrue.toString(),true.toString());//String 'true' console.log(typeoffalse.toString(),false.toString());//String 'false' console.log(typeoftrue.toLocaleString(),true.toLocaleString());//String 'true' console.log(typeoffalse.toLocaleString(),false.toLocaleString());//String 'false'
Number
javascript只有一种数字类型,既可以表示32位的整数,还可以表示64位的浮点数。
对于基本数据类型的包装对象的理解
现象:为什么可以对字符串的操作采用对象的表示法?
例如:
var s = "this is a String"; var len = s.length;
?
解析:
JavaScript三个基本数据类型都有相应的对象类;分别为Sring,Number,Boolean类;
JavaScript可以灵活的将一种类型的值转换为另一种类型;
当我们在对象环境中使用字符串时,即当我们试图访问这个字符串的属性或方法时;
JavaScript会为这个字符串值内部地创建一个String包装对象;
String对象会暂时代替原始的字符串值,完成我们的访问;
这个被内部创建的String对象是瞬间存在的,它的作用是使我们可以正常访问属性和方法;
String对象在使用过后会被系统丢弃掉;
而原始值并不会被改变;
以上同样适用于数字和布尔值类型;
使用Object()函数,任何数字、字符串、布尔值都可以转换为它对应的包装对象;
例如:
varnumber_wrapper = Object (3);
?
相关文章推荐
- JavaScript类型系统之基本数据类型与包装类型
- javascript类型系统之基本数据类型与包装类型
- 第一百零七节,JavaScript基本包装类型,数据类型的方法
- JavaScript类型系统之基本数据类型与包装类型
- javascript一些让人迷惑的地方--基本数据类型的包装对象
- javascript类型系统之基本数据类型与包装类型
- javascript中五种基本数据类型
- 6 基本数据类型或结构体的包装
- Map的put()方法中键值到底是包装类还是基本数据类型
- 你不知道的JavaScript--Item4 基本类型和基本包装类型(引用类型)
- 读javascript高级程序设计01-基本概念、数据类型、函数
- Java 基本数据类型的包装类及其数据类型转换
- javascript之基本包装类型(Boolean,Number,String)基础篇
- 基本数据类型及其包装类(二)
- JavaScript中的基本数据类型
- JavaScript的对象,赋值,即用等号赋值如x=y,也想Java类一样(Java基本数据类型不是这样的)是满足“箭头”黄金定律,如果修改x,y的值也随之改变
- javascript——基本包装类型
- JavaScript基础1——基本语法和数据类型
- 基本数据类型的包装类
- JavaScript学习笔记一 - 基本语法,数据类型、变量