自在学习JavaScript十一,详解JavaScript基本类型和引
分类:关于计算机

一、值的花色
       早在介绍JS的数据类型的时候就涉嫌过主导项目和援用类型,但是在说两类别型在此以前,大家先来精晓一下变量的值的项目。在ECMAScript中,变量能够存在两连串型的值,即原始值和援用值。
(1)原始值
       存款和储蓄在栈中的轻巧数据段,也正是说,它们的值直接存储在变量访谈的岗位。
(2)引用值
       存款和储蓄在堆中的对象,也正是说,存款和储蓄在变量处的值是四个指针,指向存储对象的内部存款和储蓄器处。
       为变量赋值时,ECMAScript的解释程序必得认清该值是原始类型,照旧援用类型。要兑现那或多或少,解释程序则需尝试判定该值是还是不是为ECMAScript的着力项目之一,即Undefined类型、Null类型、Boolean类型、Number类型和String类型。由于这一个基本类型占有的空中是永久的,所以可将她们存款和储蓄在十分的小的内存区域

自在学习JavaScript十一:JavaScript基本类型(富含类型调换)和援引类型

一值的档案的次序

早在介绍JS的数据类型的时候就关乎过主导项目和援引类型,不过在说两种类型从前,大家先来询问一下变量的

值的花色。在ECMAScript中,变量能够存在三种档案的次序的值,即原始值和引用值。

(1)原始值

储存在栈中的简单数据段,也等于说,它们的值直接存款和储蓄在变量访谈的职务。

(2)引用值

仓库储存在堆中的对象,也正是说,存款和储蓄在变量处的值是三个指南针,指向存款和储蓄对象的内部存款和储蓄器处。

为变量赋值时,ECMAScript的解释程序必得认清该值是原始类型,依旧援引类型。要兑现那点,解释程序则需

品味推断该值是不是为ECMAScript的为主类型之一,即Undefined类型、Null类型、Boolean类型、Number类型和

String类型。由于那一个大旨类型攻陷的空中是长久的,所以可将她们存款和储蓄在比较小的内存区域

  • 栈中。那样存款和储蓄便于迅

速查寻变量的值。

在众多言语中,字符串都被当作援用类型,而非基本类型,因为字符串的长短是可变的。ECMAScript打破了这一

传统。

万一一个值是援用类型的,那么它的囤积空间将从堆中抽成。由于引用值的大小会改动,所以无法把它放在栈

中,不然会下滑变量查寻的速度。相反,放在变量的栈空间中的值是该目的存款和储蓄在堆中的地址。地址的大大小小是固定

的,所以把它存储在栈中对变量质量无别的负面影响。如下图所示:

图片 1

二基本类型

ECMAScript有5种为主项目,即Undefined类型、Null类型、Boolean类型、Number类型和String类型。ECMA-

262把术语类型定义为值的三个凑合,每一种基本类型定义了它包含的值的限定及其字面量表示模式。

ECMAScript提供了typeof运算符来判定二个值是或不是在某系列型的限定内。能够用这种运算符推断二个值是不是意味着

一种为主项目:借使它是着力类型,还是可以剖断它表示哪个种类为主项目。

骨干数据类型和操作符typeof大家在头里的博文中也临时应用到。详细理解的话可以参见笔者的博文:轻易学习

JavaScript五:JavaScript的变量和数据类型。

三类型调换

具有程序设计语言最关键的特点之一是持有开展类型转变的力量。ECMAScript给开采者提供了大气简练的门类转

换方法。超越四分之二门类具备开展简短调换的法子,还会有多少个全局方法能够用于更复杂的转移。无论哪一类景况,在

ECMAScript中,类型调换都以粗略的一步操作。

(1)转变来字符串

ECMAScript的Boolean值、数字和字符串的原始值的有意思之处在于它们是伪对象,那意味它们其实具有属性

和方法。

比如,要博取字符串的尺寸,能够行使下边包车型大巴代码:

 

var sbox = "red";
document.write(sbox.length);//输出3

 

固然 "red" 是着力项目标字符串,它依旧具有属性length,用于贮存字符串的轻重。一言以蔽之,3 种主要的原始类

型 Boolean 值、数字和字符串都有 toString() 方法,能够把它们的值转换到字符串。您可能会问,“字符串还大概有

toString()方法呢,那不是多余吗?”是的,的确如此,可是ECMAScript定义全数目的都有toString()方法,无论它是伪

目的,依旧真对象。因为String类型属于伪对象,所以它自然有toString()方法。

1)Boolean 类型的toString()方法只是出口 "true" 或 "false",结果由变量的值决定:

 

var bage=false;
document.write(bage.toString());//输出"false"

 

2)Number类型的toString()方法相比较奇特,它有三种形式,即默许方式和基方式。采纳暗许形式,toString()方法

只是用相应的字符串输出数字值(无论是整数、浮点数依然科学计数法),

在暗中认可方式中,无论最早使用什么样表示法注脚数字,Number 类型的 toString() 方法重回的都以数字的十进制表

示。因而,以八进制或十六进制字面量方式注明的数字输出的都是十进制情势的。如下所示:

 

var iNum1 = 10;
var iNum2 = 10.0;
document.write(iNum1.toString());//输出 "10"
document.write(iNum2.toString());//输出 "10"

 

动用Number类型的 toString()方法的基形式,能够用分歧的基输出数字,比方二进制的基是2,八进制的基是8,

十六进制的基是16。

基只是要转变来的基数的另一种加法而已,它是 toString() 方法的参数:

 

var iNum = 10;
document.write(iNum.toString(2));//输出 "1010"
document.write(iNum.toString(8));//输出 "12"
document.write(iNum.toString(16));//输出 "a"

 

(2)转变来数字

ECMAScript提供了两种把非数字的原始值转换到数字的点子,即parseInt()和parseFloat()。前面一个把值转变到整

数,前面一个把值调换到浮点数。唯有对String类型调用这么些点子,它们才具科学生运动转;对任何品类再次回到的都是NaN。

1)parseInt()

在认清字符串是或不是是数字值前,parseInt()和 parseFloat()都会细心深入分析该字符串。parseInt()方法首先查看地点0

处的字符,推断它是不是是个有效数字;假诺不是,该措施将赶回NaN,不再继续试行其余操作。但只要该字符是行得通

数字,该格局将翻开地点1处的字符,实行同样的测量试验。这一进程将不断到发掘非有效数字的字符截至,此时

parseInt()将把该字符在此之前的字符串转换到数字。

举个例子说,倘诺要把字符串 "12345red" 转变到整数,那么parseInt()将回来12345,因为当它检查到字符r 时,就能够停

止检查评定进度。

字符串中蕴藏的数字字面量会被正确调换为数字,比方 "0xA" 会被科学转变为数字10。可是,字符串 "22.5" 将被

调换到22,因为对此整数来讲,小数点是无效字符。

 

 var iNum1 = parseInt("12345red"); 
 var iNum2 = parseInt("0xA"); 
 var iNum3 = parseInt("56.9"); 
 var iNum4 = parseInt("red"); 
 document.write("iNum1="+iNum1);//返回12345
 document.write("iNum2="+iNum2);//返回10
 document.write("iNum3="+iNum3);//返回56
 document.write("iNum3="+iNum4);//返回NaN

 

parseInt()方法还应该有基形式,能够把二进制、八进制、十六进制或任何任何进制的字符串转变来整数。基是由

parseInt()方法的第四个参数钦定的。

 

var iNum1 = parseInt("AF", 16); 
var iNum2 = parseInt("10", 2); 
var iNum3 = parseInt("10", 8); 
var iNum4 = parseInt("10", 10); 
document.write("iNum1="+iNum1);//返回175
document.write("iNum2="+iNum2);//返回2
document.write("iNum3="+iNum3);//返回8
document.write("iNum4="+iNum4);//返回10

 

2)parseFloat()方法

parseFloat()方法与parseInt()方法的管理方式相似,从地点0开始查看各种字符,直到找到第三个非有效的字符为

止,然后把该字符此前的字符串调换到整数。可是,对于那个点子来讲,第贰个冒出的小数点是卓有成效字符。尽管有两

个小数点,第二个小数点将被当做无效的。parseFloat()会把那几个小数点从前的字符调换到数字。那象征字符

串"11.22.33"将被深入分析成11.22。
采纳parseFloat()方法的另一差异之处在于,字符串必须以十进制格局表示浮点数,而不是用八进制或十六进制。

该方法会忽略前导0,所以八进制数0102 将被深入分析为102。对于十六进制数0xA,该措施将回到 NaN,因为在浮点数

中,x不是有效字符。另外,parseFloat() 方法也尚未基格局。

上面是使用 parseFloat() 方法的一对示范:

 

var fNum1 = parseFloat("12345red"); 
var fNum2 = parseFloat("0xA"); 
var fNum3 = parseFloat("11.2"); 
var fNum4 = parseFloat("11.22.33"); 
var fNum5 = parseFloat("0102"); 
var fNum6 = parseFloat("red"); 
document.write("iNum1="+iNum1);//返回12345
document.write("iNum2="+iNum2);//返回NaN
document.write("iNum3="+iNum3);//返回11.2
document.write("iNum4="+iNum4);//返回11.22
document.write("iNum5="+iNum5);//返回102
document.write("iNum6="+iNum6);//返回NaN

 

(3)强制类型转变

选拔强制类型转变四处理转变值的类型。使用强制类型转变能够访谈特定的值,尽管它是另一种档次的。

ECMAScript 中可用的3种强制类型调换如下:

1)Boolean(value) - 把给定的值转变到 Boolean 型;

2)Number(value) - 把给定的值转变到数字(能够是整数或浮点数);

3)String(value) - 把给定的值转变来字符串;

那么些本该很好领会,在上学那个高档程序设计语言的时候经常会能运用到这个。

四援用项目

援引类型一般叫做类,相当于说,遭遇引用值,所管理的便是指标。从守旧意义上来讲,ECMAScript并不真正具

有类。事实上,除了表明不真实类,在ECMA-26第22中学一贯未曾出现“类”那么些词。ECMAScript定义了“对象定义”,逻辑

优等价于其他程序设计语言中的类。

对于JS对象的详实解释在头里的博文中也是有,参照他事他说加以考察:轻易学习JavaScript九:JavaScript对象和数组。

笔者们再来领悟一个论断引用类型的操作符instanceof

在利用typeof运算符时选用引用类型存款和储蓄值会师世两个主题材料,无论援引的是哪些项目标目的,它都回到 "object"。

ECMAScript引入了另多少个Java运算符 instanceof 来缓和那一个主题材料。

instanceof运算符与typeof运算符相似,用于识别正在管理的目标的花色。与typeof方法分歧的是,instanceof方

法必要开采者分明地认可对象为某一定项目。

例如:

 

var oStringObject = new String("hello world");
document.write(oStringObject instanceof String);//输出 "true"

这段代码问的是“变量oStringObject是不是为 String 对象的实例?”oStringObject的确是 String对象的实例,由此结

 

果是 "true"。尽管不像typeof方法那样灵活,但是在typeof方法再次回到 "object" 的情状下,instanceof方法依旧很有用

的。
别的,ECMAScript还也会有伪对象一说,也正是任何的为主类型,使用new创制时也是足以当作对象的,例如:

String对象,Boolean对象和Number对象。它们是主导项目标援用类型。详细掌握参谋:ECMAScript援用类型。

ECMAScript还含有了过多对象,本地对象,内置对象和宿主对象。这么些大家会在前面包车型地铁面向对象的时候具体驾驭。

五复制变量值

在变量复制方面,基本项目和引用类型有所不相同,基本类型是复制的是值小编,而引用类型复制的是地方。

我们来看现实的实例:

 

 var box="Lee";
 var box2=box;
 box2="Amy";//重新赋值后,两个基本类型变量操作时互不影响,还是保持各自的独立性
 document.write("box2="+box2+"
");
 document.write("box="+box);

 

输出的结果为:Amy

Lee

图片 2

 

var box=new Object();
box.name="Lee";
var box2=box;//把引用地址值复制给box2
box2.name="Amy";//重新赋值后,两个引用类型都指向同一个对象。name属性只要发生改变都会更改原值。
document.write(" box2.name="+box2.name+"
");
document.write("box.name="+box.name);

输出的结果为:Amy
Amy

 

图片 3

 

一值的体系早在介绍JS的数据类型的时候就关乎过主导类型和征引类型...

  • 栈中。那样存款和储蓄便于火速检索变量的值。
           在多数言语中,字符串都被看做引用类型,而非基本类型,因为字符串的长短是可变的。ECMAScript打破了这一
    传统。
           假诺二个值是引用类型的,那么它的囤积空间将从堆中分红。由于援引值的大小会改造,所以无法把它坐落栈中,不然会下跌变量查寻的进程。相反,放在变量的栈空间中的值是该目的存款和储蓄在堆中的地址。地址的深浅是一定的,所以把它存款和储蓄在栈中对变量质量无任何负面影响。如下图所示:

图片 4

二、基本项目
       ECMAScript有5种为主项目,即Undefined类型、Null类型、Boolean类型、Number类型和String类型。ECMA-262把术语类型定义为值的三个汇聚,各个基本类型定义了它包括的值的限量及其字面量表示方式。
       ECMAScript提供了typeof运算符来决断贰个值是不是在某体系型的限定内。能够用这种运算符剖断叁个值是还是不是意味着一种为主项目:假设它是中央类型,还可以看清它代表哪一类为主项目。
       基本数据类型和操作符typeof大家在头里的博文中也一再使用到。详细询问的话能够参照那篇作品:详解JavaScript的变量和数据类型

三、类型调换
       全部程序设计语言最关键的特点之一是兼具开展类型调换的力量。ECMAScript给开垦者提供了大批量简短的类型转变方法。当先贰分一体系拥有开展简短转变的方法,还应该有多少个全局方法能够用于更眼花缭乱的转移。无论哪一类意况,在ECMAScript中,类型转换都是大致的一步操作。
(1)调换来字符串
       ECMAScript的Boolean值、数字和字符串的原始值的珠璧交辉之处在于它们是伪对象,那意味着它们其实具备属性和办法。
诸如,要赢得字符串的尺寸,可以使用上面包车型客车代码:

var sbox = "red"; 
document.write(sbox.length);//输出3 

       纵然 "red" 是着力项目标字符串,它如故具有属性length,用于存放字符串的尺寸。简单的讲,3 种重大的原始类型Boolean 值、数字和字符串都有 toString() 方法,能够把它们的值调换来字符串。您或然会问,“字符串还应该有toString()方法呢,这不是多余吗?”是的,的确如此,可是ECMAScript定义全部目的都有toString()方法,无论它是伪对象,依旧真对象。因为String类型属于伪对象,所以它一定有toString()方法。
1)Boolean 类型的toString()方法只是出口 "true" 或 "false",结果由变量的值决定:

var bage=false; 
document.write(bage.toString());//输出"false" 

2)Number类型的toString()方法相比较新鲜,它有三种方式,即暗中认可情势和基格局。选拔暗中认可格局,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数照旧科学计数法),在暗中认可方式中,无论最先使用什么样表示法申明数字,Number 类型的 toString() 方法重返的都以数字的十进制表示。因而,以八进制或十六进制字面量方式评释的数字输出的都是十进制情势的。如下所示:

var iNum1 = 10; 
var iNum2 = 10.0; 
document.write(iNum1.toString());//输出 "10" 
document.write(iNum2.toString());//输出 "10" 

应用Number类型的 toString()方法的基方式,能够用差异的基输出数字,比方二进制的基是2,八进制的基是8,十六进制的基是16。
       基只是要调换到的基数的另一种加法而已,它是 toString() 方法的参数:

var iNum = 10; 
document.write(iNum.toString(2));//输出 "1010" 
document.write(iNum.toString(8));//输出 "12" 
document.write(iNum.toString(16));//输出 "a" 

(2)转变到数字
       ECMAScript提供了三种把非数字的原始值转变到数字的秘技,即parseInt()和parseFloat()。后边叁个把值调换来整数,前面一个把值转换来浮点数。独有对String类型调用那些方法,它们技艺精确运维;对别的体系重返的都是NaN。
1)parseInt()
       在认清字符串是还是不是是数字值前,parseInt()和 parseFloat()都会留心剖判该字符串。parseInt()方法首先查看地方0处的字符,剖断它是或不是是个有效数字;如若不是,该措施将赶回NaN,不再继续试行其余操作。但假使该字符是行得通数字,该格局将翻开地方1处的字符,进行同样的测量检验。这一进度将不独有到开掘非有效数字的字符截至,此时parseInt()将把该字符以前的字符串转变来数字。
       比方,尽管要把字符串 "12345red" 调换到整数,那么parseInt()将回来12345,因为当它检查到字符r 时,就能停下检查实验进度。
       字符串中富含的数字字面量会被科学转换为数字,举例 "0xA" 会被科学转变为数字10。可是,字符串 "22.5" 将被调换到22,因为对于整数来讲,小数点是船到江心补漏迟字符。

var iNum1 = parseInt("12345red"); 
var iNum2 = parseInt("0xA"); 
var iNum3 = parseInt("56.9"); 
var iNum4 = parseInt("red"); 
document.write("iNum1="+iNum1);//返回12345 
document.write("iNum2="+iNum2);//返回10 
document.write("iNum3="+iNum3);//返回56 
document.write("iNum3="+iNum4);//返回NaN 

        parseInt()方法还应该有基方式,能够把二进制、八进制、十六进制或其余任何进制的字符串调换到整数。基是由parseInt()方法的第3个参数钦命的。

var iNum1 = parseInt("AF", 16); 
var iNum2 = parseInt("10", 2); 
var iNum3 = parseInt("10", 8); 
var iNum4 = parseInt("10", 10); 
document.write("iNum1="+iNum1);//返回175 
document.write("iNum2="+iNum2);//返回2 
document.write("iNum3="+iNum3);//返回8 
document.write("iNum4="+iNum4);//返回10 

2)parseFloat()方法
        parseFloat()方法与parseInt()方法的管理格局相似,从地点0初阶翻看各种字符,直到找到第八个非有效的字符停止,然后把该字符在此之前的字符串转变来整数。但是,对于那几个主意来讲,第贰个冒出的小数点是可行字符。倘若有多个小数点,第叁个小数点将被用作无效的。parseFloat()会把这一个小数点以前的字符调换来数字。那意味字符串"11.22.33"将被深入分析成11.22。
       使用parseFloat()方法的另一差别之处在于,字符串必需以十进制方式表示浮点数,实际不是用八进制或十六进制。该方法会忽略前导0,所以八进制数0102 将被深入分析为102。对于十六进制数0xA,该方法将重返NaN,因为在浮点数中,x不是有效字符。另外,parseFloat() 方法也一向不基情势。
      下边是利用 parseFloat() 方法的有的示范:

var fNum1 = parseFloat("12345red"); 
var fNum2 = parseFloat("0xA"); 
var fNum3 = parseFloat("11.2"); 
var fNum4 = parseFloat("11.22.33"); 
var fNum5 = parseFloat("0102"); 
var fNum6 = parseFloat("red"); 
document.write("iNum1="+iNum1);//返回12345 
document.write("iNum2="+iNum2);//返回NaN 
document.write("iNum3="+iNum3);//返回11.2 
document.write("iNum4="+iNum4);//返回11.22 
document.write("iNum5="+iNum5);//返回102 
document.write("iNum6="+iNum6);//返回NaN 

(3)强制类型转变
        使用强制类型转换各管理转变值的品种。使用强制类型转变能够访谈特定的值,即便它是另一种等级次序的。ECMAScript 中可用的3种强制类型转换如下:

  •        1)Boolean(value) - 把给定的值调换来 Boolean 型;
  •        2)Number(value) - 把给定的值调换来数字(能够是整数或浮点数);
  •        3)String(value) - 把给定的值转变来字符串;

       那些本该很好精晓,在攻读这一个高端程序设计语言的时候平时会能使用到那一个。
四、援引类型
       引用类型一般叫做类,也正是说,际遇援用值,所拍卖的就是指标。从守旧意义上来讲,ECMAScript并不确实具有类。事实上,除了表达荒诞不经类,在ECMA-26第22中学常有未曾出现“类”这几个词。ECMAScript定义了“对象定义”,逻辑上等价于其余程序设计语言中的类。
       对于JS对象的详实分解在头里的博文中也会有,参考:轻巧学习JavaScript九:JavaScript对象和数组。
       大家再来领悟多少个确定援用类型的操作符instanceof,在动用typeof运算符时采纳援用类型存款和储蓄值会油不过生一个难点,无论援用的是什么样品种的对象,它都回来 "object"。ECMAScript引进了另一个Java运算符 instanceof 来化解这么些难点。instanceof运算符与typeof运算符相似,用于识别正在管理的对象的类型。与typeof方法差别的是,instanceof方
法供给开荒者明确地料定对象为某一定项目。
       例如:

var oStringObject = new String("hello world"); 
document.write(oStringObject instanceof String);//输出 "true" 

       这段代码问的是“变量oStringObject是或不是为 String 对象的实例?”oStringObject的确是 String对象的实例,由此结果是 "true"。纵然不像typeof方法那样灵活,然而在typeof方法重临 "object" 的事态下,instanceof方法依旧很有用的。
       此外,ECMAScript还也可以有伪对象一说,也正是其他的着力类型,使用new创立时也是足以看成靶子的,举例:String对象,Boolean对象和Number对象。它们是大旨类型的引用类型。详细摸底参谋:ECMAScript援引类型。ECMAScript还含有了重重对象,本地对象,内置对象和宿主对象。这么些大家会在末端的面向对象的时候具体通晓。
五、复制变量值       在变量复制方面,基本项目和引用类型有所分化,基本类型是复制的是值作者,而援用类型复制的是地点。
      大家来看现实的实例:

var box="Lee"; 
var box2=box; 
box2="Amy";//重新赋值后,两个基本类型变量操作时互不影响,还是保持各自的独立性 
document.write("box2="+box2+"<br/>"); 
document.write("box="+box); 

 输出的结果为:Amy
                        Lee

图片 5

var box=new Object(); 
box.name="Lee"; 
var box2=box;//把引用地址值复制给box2 
box2.name="Amy";//重新赋值后,两个引用类型都指向同一个对象。name属性只要发生改变都会更改原值。 
document.write(" box2.name="+box2.name+"<br/>"); 
document.write("box.name="+box.name); 

输出的结果为:Amy
                       Amy

图片 6

上述正是有关JavaScript基本类型和援引类型的详细介绍,希望对大家的学习抱有帮助。

你恐怕感兴趣的篇章:

  • js中剖断Object、Array、Function等引用类型对象是或不是等于
  • JavaScript基础篇(3)之Object、Function等援用类型
  • 《JavaScript高档编制程序》学习笔记之object和array引用类型
  • javascript中挑顺德类型和援引类型的区分解析
  • JavaScript基本数据类型及值类型和援引类型
  • 浅析JavaScript基本项目与引用类型
  • 跟小编就学javascript的宗旨类型和引用类型
  • js如何得到object类型里的键值
  • JS 对象(Object)和字符串(String)互转方法
  • 详解Javascript中的Object对象
  • JavaScript引用类型Object常见用法实例剖析

本文由正版必中一肖图发布于关于计算机,转载请注明出处:自在学习JavaScript十一,详解JavaScript基本类型和引

上一篇:用简洁的jQuery方法toggleClass实现隔行换色,方法定 下一篇:没有了
猜你喜欢
热门排行
精彩图文