JavaScript的数据类型解析
前言
提示:每种数据类型的存储结构不同,比如:存储字符串、数值等等,用来存储不同的信息。存储结构的差异需要依托不同的数据类型来实现。
提示:以下是本篇文章正文内容,下面案例可供参考
一、JS的六种数据类型
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),其表示一个本来要返回数值的操作数未返回数值的情况,这样做是为了避免程序抛出错误。
两大特点:
- 任何涉及NaN的操作结果都为NaN;
- 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()函数;
- Number()函数可以将任意类型的参数转换为数值类型;
- parseInt()函数主要针对字符串转换为数值类型;
- 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. 数据类型转换分为显示转换和隐式转换,显示转换主要通过函数手动完成,隐式转换在相关的运算或语句中实现的,隐式转换不可控。