了解JavaScript的数据类型

前言

        JavaScript中有5种基本数据类型:Undefined、Null、Boolean、Number和String。另外还有一种复杂类型Object。JavaScript不支持任何自定义类型,所有值都将是上述6种类型之一。

一、typeof操作符

        JavaScript提供了一种检测变量数据类型的手段——typeof。用typeof检测数据类型可能返回以下某个字符串:

        "undefined":值未定义

        "boolean":布尔类型

        "string":字符串类型

        "number":数值类型

        "object":检测的值是对象类型或null

        "function":函数类型

var a;
console.log(typeof a)
var b=1;
console.log(typeof b)
var c='aaa'
console.log(typeof c)
var d=null
console.log(typeof d)
var e=function (){}
console.log(typeof e)

         运行以上代码,输出如下

了解JavaScript的数据类型_第1张图片

二、Undefined类型 

        属于Undefined类型的只有一个值,即undefined。用var声明的变量但未初始化时,这个变量的值就是undefined。

三、Null类型 

         属于Null类型的只有一个值,即null。null值表示一个空对象指针,所以用typeof操作符检测null会返回“object”。

        undefined值派生自null值,所以以下代码会输出true

var a;
console.log(a==null)    //输出true

四、Boolean类型

         Boolean类型只有两个值:true和false。JavaScript中所有类型的值都可以转换成对应的Boolean值,要将一个值转为Boolean值,可以调用转型函数Boolean(),如下所示

var a="aaa";
console.log(Boolean(a))    //true
var b="";
console.log(Boolean(b))    //false
var c=100;
console.log(Boolean(c))    //true
var d=0;
console.log(Boolean(d))    //false
var e=function (){};
console.log(Boolean(e))    //true
var f=null;
console.log(Boolean(f))    //false
var g;
console.log(Boolean(g))    //false

五、Number类型

        Number类型使用IEEE754格式来表示整数和浮点数。为了支持各种数值类型,JavaScript定义了不同的数值字面量格式。

        1、整数

        十进制整数可以直接在代码中输入,如下所示       

var a=100;

        整数除了十进制表示外,还可通过八进制(以8为基数)或十六进制(以16为基数)来表示。其中,八进制第一位必须是0,后面是数字序列(0~7),如果其中某个数值超出了范围,那么前面的0将被忽略,后面的数值将被当做十进制解析。例如

var a=070;    //八进制的56
var b=079;    //无效的八进制的数值,解析为十进制的79
var b=08;    //无效的八进制的数值,解析为十进制的8

        十六进制前两位必须是0x,后跟任何十六进制数字(0~9及A~F) 。其中,字母A~F大小写都可以。如下所示

var a=0xA;    //十六进制的10
var b=0x1f;    //十六进制的31

        在进行算数计算时,所有以八进制和十六进制表示的数值,最终都将被转换成十进制。

        2、浮点数

         所谓浮点数,就是该数值中必须包含一个小数点,并且小数点后面至少有一位数字,虽然小数点前面可以没有整数,但不推荐这种做法,以下是几个例子

var a=2.1;
var b=2.0;
var c=.2;    //合法,但不推荐

        如果小数点后面没有跟任何数字,那么这个数值将作为整数来保存。同样,如果浮点数本身表示的是整数,那么该值也会转换为整数,如下所示

var a=1.;    //解析为1
var b=1.0    //解析为1

        3、数值范围 

        由于内存限制,JavaScript不能保存所有数值。JavaScript能够表示的最小数值保存在Number.MIN_VALUE中,值为5e-324,最大数值保存在Number.MAX_VALUE中,值为1.7976931348623157e+308,如果某次计算得到的值不在这个范围内,正数将会被转为Infinity(正无穷),负数将会被转为-Infinity(负无穷),并且这个数值不能再次参与计算,因为Infinity不是能够参与计算的数值。

console.log(Number.MIN_VALUE)    //5e-324
console.log(Number.MAX_VALUE)    //1.7976931348623157e+308

        如果想确定一个数值是不是在最大值和最小值之间,可以使用isFinite()函数。如果返回true,证明在最大值和最小值之间,否则不在。

console.log(isFinite(100))    //true
console.log(isFinite(Number.MAX_VALUE+Number.MAX_VALUE))    //false

        4、NaN

        NaN是一个特殊的数值,即非数值, NaN用于表示一个本来应该返回数值的操作数未返回数值的情况,比如以下代码

console.log(10+'a')    //输出10a
console.log(10-'a')    //输出NaN
console.log(10*'a')    //输出NaN
console.log(10/'a')    //输出NaN

        10+‘a’输出10a是因为数值与字符串相加的时候,数值会被转为字符串。

        NaN有两个特点:

        1、任何涉及NaN的操作都会返回NaN(比如NaN/10)

        2、NaN与任何值都不相等,包括NaN本身

        如果要判断一个数值是不是NaN,可以使用isNaN()函数。该函数接收单个参数,该参数可以是任何类型,请看下面代码:

console.log(isNaN(10))            //false
console.log(isNaN('10'))          //false
console.log(isNaN('a'))           //true
console.log(isNaN(true))          //false
console.log(isNaN(false))         //false
console.log(isNaN(null))          //false
console.log(isNaN(undefined))     //true
console.log(isNaN(function (){})) //true

        5、数值转换 

        JavaScript提供三个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat() 。Number()可以用于任何数据类型,另外两个则用于把字符串转为数值。以下是Number()函数对于不同类型的参数返回的不同结果:

console.log(Number(10))             //10
console.log(Number('10'))           //10
console.log(Number('a'))            //NaN
console.log(Number(true))           //1
console.log(Number(false))          //0
console.log(Number(null))           //0
console.log(Number(undefined))      //NaN
console.log(Number(function (){}))  //NaN

        由于Number()函数在转换字符串时候比较负责且不够合理,因此在处理整数的时候更常用的是parseInt()函数。以下是parseInt()函数对于不同类型的参数返回的不同结果:

console.log(parseInt(10))             //10
console.log(parseInt(10.5))           //10
console.log(parseInt('10'))           //10
console.log(parseInt('10.5'))         //10
console.log(parseInt(''))             //NaN
console.log(parseInt('a'))            //NaN
console.log(parseInt('12a'))          //12
console.log(parseInt('a2'))           //NaN
console.log(parseInt('a2b'))          //NaN
console.log(parseInt('0xA'))          //10(十六进制)
console.log(parseInt('070'))          //56(八进制)
console.log(parseInt('0xf'))          //15(十六进制)
console.log(parseInt(true))           //NaN
console.log(parseInt(false))          //NaN
console.log(parseInt(null))           //NaN
console.log(parseInt(undefined))      //NaN
console.log(parseInt(function (){}))  //NaN

        如果字符串第一个字符为数字, parseInt()函数会继续解析第二个字符,直到解析完所有后续字符或遇到一个非数字字符才结束。所以字符串'12a'和'10.5'分别解析成12和10(小数点并不属于数字)

        parseInt()还可以提供第二个参数,指定转换时使用的基数是多少进制,比如:

var num = parseInt("0xAF", 16); 指定采用十六进制基数。这是因为在ECMAScript 3 JavaScript引擎中,以0开头的参数在某些情况下会被当做八进制字面量,而在ECMAScript 5 JavaScript引擎中,parseInt()已经不提供解析八进制的功能。

var a=parseInt('10',2)  //按二进制解析
var b=parseInt('10',8)  //按八进制解析
var c=parseInt('10',10)  //按十进制解析
var d=parseInt('10',16)  //按十六进制解析

        如果不指定第二个参数,则由parseInt()决定采用哪种进制解析,因此为了避免错误,推荐任何情况下都不要省略第二个参数。

        parseFloat()与parseInt()的规则类似,如果字符串第一个字符为数字, parseFloat()函数会继续解析第二个字符,直到解析完所有后续字符或遇到一个非数字字符才结束。区别是parseFloat()会忽略开头的0,而且parseFloat()只可以转换十进制的数值。以下是parseFloat()函数对于不同类型的参数返回的不同结果:

console.log(parseFloat(10))             //10
console.log(parseFloat(10.5))           //10.5
console.log(parseFloat('10'))           //10
console.log(parseFloat('10.5'))         //10.5
console.log(parseFloat(''))             //NaN
console.log(parseFloat('a'))            //NaN
console.log(parseFloat('12a'))          //12
console.log(parseFloat('a2'))           //NaN
console.log(parseFloat('a2b'))          //NaN
console.log(parseFloat('0xA'))          //0
console.log(parseFloat('070'))          //7
console.log(parseFloat('0xf'))          //0
console.log(parseFloat(true))           //NaN
console.log(parseFloat(false))          //NaN
console.log(parseFloat(null))           //NaN
console.log(parseFloat(undefined))      //NaN
console.log(parseFloat(function (){}))  //NaN

六、String类型 

         String类型即字符串类型,由英文的单引号或双引号表示,以下两种写法都是合法的:

var a='a';
var b="b";

         1、转义序列

        String 数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。这些字符字面量如下表所示:

字面量 含义
\n 换行
\t 制表
\b 退格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号 ( ' ) ,在用单引号表示的字符串嵌套中使用,例如: 'I say:  \'hello\' '
\" 双引号 ( " ) ,在用双引号表示的字符串嵌套中使用,例如: "I say:  \"hello\" "
\xnn 以十六进制代码 nn 表示的一个字符(其中 n 为 0 ~ F)。例如, \x41 表示 'A'
\unnnn 以十六进制代码 nnnn 表示的一个 Unicode 字符(其中 n 为 0 ~ F)。例如, \u03a3 表示希腊字符 Σ
var text = "The letter is: \u03a3.";
console.log(text) //The letter is: Σ.

        任何字符串都可以调用length来获取长度

var text = "The letter is: \u03a3.";
console.log(text.length) //17

        2、字符串转换 

        第一种方式是调用toString()方法。数值、布尔值、对象和字符串值都有toString()方法。但null和undefined没有这个方法,一般情况下,调用toString()方法无需传递参数,但在调用数值的toString()方法时,可以传递一个参数,指定输出数值的基数。

var a = 20;
console.log(a.toString())   //20
console.log(a.toString(2))  //10100
console.log(a.toString(8))  //24
console.log(a.toString(10)) //20
console.log(a.toString(16)) //14

        为了防止被转换的值为null或undefined,可以在转换前使用String()函数将被转换值强制转为字符串String()函数的几种返回结果如下:

console.log(String(null))             //'null'
console.log(String(undefined))        //'undefined'
console.log(String(100))              //'100'
console.log(String(true))             //'true'
console.log(String(false))            //'false'
console.log(String(function (){}))    //'function (){}'

        第二种方式可以将被转换的值与一个空字符串相加,比如:

console.log(100+'')    //'100'

        这种方式也是开发者经常使用的。

七、Object类型 

        Object类型是所有它的实例的基础,可以通过以下代码创建一个Object对象的实例:

var obj=new Object();

        Object的每个实例都具有下列属性和方法:

        1、constructor:构造函数

        2、hasOwnProperty(propertyName):检查当前对象中是否包含给定的属性

        3、IsPrototypeof(objec):检查传入的对象是否是传入对象的原型

        4、propertyIsEnumerable(propertyName):检查对象属性是否可以执行for-in语句

        5、toLocalString:返回对象字符串

        6、toString():返回对象字符串

        7、valueOf():通常返回值与toString一样 

        在实际开发中,Object类型很少被单独拿出来使用,所以本文不深入讲解Object类型,有关Object类型更深入的讨论,将在后续相关篇章中逐一讲解。

小结 

        本文讲解了JavaScript中的7种类型:Undefined、Null、Boolean、Number、String、Object,以及类型之间的转换方式:Number()、parseInt()、parseFloat()、toString()。灵活掌握这几种类型的应用,为后续更深入的学习打下坚实的基础。

你可能感兴趣的:(javascript,开发语言,ecmascript)