JavaScript的数据类型详细介绍


前言

提示:每种数据类型的存储结构不同,比如:存储字符串、数值等等,用来存储不同的信息。存储结构的差异需要依托不同的数据类型来实现。


提示:以下是本篇文章正文内容,下面案例可供参考

一、JS的六种数据类型

数据类型
基本数据类型
复合数据类型
String 字符串类型
Boolean 布尔类型
Number 数值类型
Undefined 未定义类型
Null 空类型
Object 对象类型

ECMAScript不支持任何创建自定义类型的数据,所有数据都是以上六种之一。

二、数据类型介绍

2.1 字符串类型(String)

字符串是存储字符的变量,如果想定义一个字符串类型的变量,可以由双引号(" ")和单引号(’ ')括起来即可,当然单引号内可包含双引号,同理双引号内也可包含单引号。

var a ='tom';
var b = "tom";
var c = "hello 'world'";

2.2 数值类型(Number)

2.2.1 浮点数

JS中只有一种数据类型,既表示整数又可表示浮点数,最基本的数值字面量格式是十进制,也可使用八进制和十六进制来表示。

var num1 = 60; //十进制60
var num2 = 060; //十进制的48
var num3 = 0x60; //十进制的98

在定义时,如果八进制字面值中的数值超出了范围(0-7),那么前导零将被忽略,后面的数值将被当作十进制数值解析。

浮点数值所需要的内存空间是保存为整数数值的两倍,浮点数金典案例:0.1+0.2不等于0.3 ?

2.2.2 数值范围

由于内存的关系,并不会存储所有的数据,ECMAScript将能够表示的最小数值保存在Number.MIN_VALUE中,将最大数值保存在Number.MAX_VALUE,其存储范围在5e-324到1.7976931348623157e+308之间。

document.write(Number.MIN_VALUE); //打印5e-324
document.write(Number.MAX_VALUE); //打印1.7976931348623157e+308

如果小于最小值,则表示-Infinity(负无穷),大于最大值,则表示Infinity(正无穷)。

document.write(-1e324); //-Infinity
document.write(Number.MAX_VALUE*2); //打印Infinity

2.2.3 NaN

NaN是一个特殊的值,表示非数值(Not a Number),其表示一个本来要返回数值的操作数未返回数值的情况,这样做是为了避免程序抛出错误。

两大特点:

  1. 任何涉及NaN的操作结果都为NaN;
  2. NaN与任何值都不相等,包括NaN本身。
document.write(NaN + 1); //打印NaN
document.write(NaN == NaN); //打印false

2.3 布尔类型(Boolean)

布尔类型只有两个值:true(真)和false(假),布尔类型中的true和false大小写敏感。

document.write(1>10); //打印false
document.write(1 != 10); //打印true

2.4 未定义类型(Undefined)

未定义类型的值只有一个就是undefined,当一个变量被声明,但未被赋值时,它的值就是undefined;

var a;
document.write(a); //打印undefined
document.write(b); //程序报错:b is not defined

2.5 空类型(Null)

空类型的值只有一个就是null,null表示准备用来保存对象,还没有真正保存对象的值,从逻辑角度看,null值表示一个空对象指针

var a = null;
document.write(a); //打印null

如果定义的变量准备将来用于保存对象,那么最好将该变量初始化为null而不是其他值。

2.6 对象类型(Object)

ECMAScript中的对象其实就是一组数据和功能的集合,可以使用对象字面量表示来创建一个对象,并可以为其赋多个数据值。

如法如下:

{属性名:数据值, 属性名:数据值,…}

var student={           //定义一个student对象
	name:'jack',
	age:18,
	sex:'male'
}
document.write(student.name);     //打印为jack
document.write(student.age);        //打印为18
document.write(student.sex);         //打印为male

三、数据类型检测

在JS中,由于在声明变量的时候并没有设置数据类型,那么如果需要得知数据的类型,该如何处理?

JS提供了一个typeof操作符,可以对数据的类型进行检测。
使用方法如下例子:

document.write(typeof 'hello'+'<br/>');       //打印为string
document.write(typeof 1+'<br/>');              //打印为number
document.write(typeof true+'<br/>');         //打印为boolean

四、数据类型转换

在实际开发过程中,经常需要涉及到数据类型要进行转换,比如我们从页面获取的值都是String类型,但如果需要进行算术运算时,就需要将其转化为Number类型等等。

类型转换主要分为两种:显示转换(强制转换)、隐式转换(自动转换),其中隐式转换是不可控的。

4.1 字符串类型转换

显示转换主要包含String()方法和toString()方法。
toString()方法是除了Null和Undefined之外是所有类型的值都可使用的。

具体使用方法如下:

var age = 11;                                 //number类型
var ageStr=age.toString();
document.write("ageStr="+ageStr+",类型为:"+typeof ageStr);    //打印11,类型为String
document.write("age="+age+",类型为:"+typeof age);             //打印11,类型为Number
var bool = true;
var boolStr=bool.toString();
document.write("boolStr="+bool.toString()+",类型为:"+typeof boolStr);   //打印true,类型为String
document.write("bool="+bool+",类型为:"+typeof bool)                     //打印true,类型为Number
var nuStr = String(null);                    //null类型
document.write(nuStr+"类型为:"+typeof nuStr);                //打印null,类型为String               
var undeStr = String(undefined);            //undefined类型
document.write(undeStr+"类型为:"+typeof undeStr);            //打印undefined,类型为String 

上述两种方法都是强制将其他类型转换为String类型,但是在某些情况下,即使我们不提供强制转换,JS也会进行自动转换,常见的情况比如进行加法运算时,如果只有一个操作值时字符串,则会将另外一个非字符串值转换为字符串,然后再进行拼接。

var x="10";
var y=20;
var result=x+y;
document.write("result="+result+"result类型为:"+typeof result);  //打印1020,类型为String

4.2 数值类型转换

显示转换主要包含了Number()、parseInt()、parseFloat()函数;

  1. Number()函数可以将任意类型的参数转换为数值类型;
  2. parseInt()函数主要针对字符串转换为数值类型;
  3. parseFloat()函数是针对字符串转换为浮点数。
document.write("true转换为:"+Number(true)+"<br/>");               //true转换为:1
document.write("false转换为:"+Number(false)+"<br/>");             //false转换为:0
document.write("100转换为:"+Number(100)+"<br/>");                 //100转换为:100
document.write("null转换为:"+Number(null)+"<br/>");               // null转换为:0
document.write("' 12'转换为"+parseInt(" 12")+"<br/>");               //' 12'转换为12
document.write("'0x12'转换为"+parseInt("0x12")+"<br/>");                //'0x12'转换为18
document.write("'12abc'转换为"+parseInt("12abc")+"<br/>");             //'12abc'转换为12
document.write("'1.23.4'转换为:"+parseFloat("1.23.4")+"<br/>");        //'1.23.4'转换为:1.23
document.write("'123abc'转换为:"+parseFloat("123abc")+"<br/>");        //'123abc'转换为:123
document.write("'123'转换为:"+parseFloat("123")+"<br/>");            //'123abc'转换为:123   
document.write("'12.3ab4'转换为:"+parseFloat("12.3ab4")+"<br/>");      //'12.3ab4'转换为:12.3

数值型转换函数对比如下:
在这里插入图片描述
除上述三种显示转换外,数值类型转换中也存在隐式转换,如下例子,自动将非数值类型转换为了数值类型:

var x=100;
var y="100";                           //字符串   
var z="50";
var res1=x-z;
var res2=y-z;
document.write(typeof res1+"<br/>");   //打印number
document.write(typeof res2);           //打印number

4.3 布尔类型转换

显示转换主要是通过Boolean()函数,该函数可强制转换任意值为布尔类型;

document.write("空字符串转换为:"+Boolean("")+"; abc转换为:"+Boolean("abc")+"<br/>");   //空字符串转换为:false; abc转换为:true
document.write("NaN转换为:"+Boolean(NaN)+"; 123转换为:"+Boolean(123)+"<br/>");          //NaN转换为:false; 123转换为:true
document.write("0转换为:"+Boolean(0)+"<br/>");                                        //0转换为:false
document.write("null转换为:"+Boolean(null)+"<br/>");                                  //null转换为:false
document.write("undefined转换为:"+Boolean(undefined)+"<br/>");                     //undefined转换为:false    
document.write("对象转换为:"+Boolean({name:"jack"})+"<br/>")                         //对象转换为:true 
document.write("false转换为:"+Boolean(false)+"; true转换为:"+Boolean(true));          //false转换为:false; true转换为:true

隐式转换比如逻辑判断式:

document.write(1>10); //打印false
document.write(1 != 10); //打印true

总结

1. js中六种不同的数据类型,分别为:String、Number、Boolean、Undefined、Null和Object类型;

2. typeof操作符检测数据类型;

3. 数据类型转换分为显示转换和隐式转换,显示转换主要通过函数手动完成,隐式转换在相关的运算或语句中实现的,隐式转换不可控。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcyd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值