JavaScript中的基本数据类型

1.五种基本数据类型

JavaScript有五种基本数据类型:Undefined,Boolean,Null,Number,String。

因为JavaScript是弱类型语言,一个变量可以赋值为任意数据类型,所有我们需要使用typeof关键字判断变量的数据类型。

typeof关键字将根据变量的数据类型返回一个字符串:

 UndefinedBooleanNumberStringNull
typeof 返回得道字符串undefinedbooleannumberstringobject

1.1 Undefined类型

一个变量在声明后未经初始化,将会自动获得Undefined数据类型。Undefined数据类型只有一个字面量undefined,尽管可以显示地用字面量undefined为变量赋值,但这样做毫无意义.

var foo;//没有初始化
var boo=undefined;//使用undefined字面量现实地初始化

alert(typeof foo);//undefined
alert(typeof boo);//undefined

在JavaScript中如果使用一个没有声明的变量会报错,但是如果使用typeof检测一个未经声明的变量居然是可以行得通的,其返回的结果也是"undefined":

var foo;//没有初始化

//变量voo没有声明

alert(typeof foo);//undefined
alert(typeof voo);//undefined

因此,最佳实践是在声明一个变量地同时显示地初始化,如果能够做到这一点,那么当 typeof 操作符返回"undefined"值时, 我们就知道被检测的变量还没有被声明,而不是尚未初始化。

1.2 Null

Null值表示一个空地对象指针,这也是为什么使用typeof时返回的时object。

Null类型只有一个字面量null,无论在什么情况下 都没有必要把一个变量的值显式地设置为 undefined,可是同样的规则对 null 却不适用。换句话说, 只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存 null 值。

var foo=null;
alert(typeof foo);//object

1.3 Boolean

Boolean类型表示真或假,它有两个字面量true和false,注意true和false都是区分大小写的,也就是说True和False等其他任何混合大小写形式都不是Boolean的字面量。

var zhen = true;
var jia = false;
alert(typeof zhen);//boolean
alert(typeof jia);//boolean

1.4 Number

1.4.1 数字字面量

与其他语言区分整型和浮点型不同,JavaScript中任何数字类型都是用Number类型表示。

整数(十进制,八进制,十六进制),浮点数(普通表示法,科学计数法)都是Number类型的字面量:

var intNum = 55;//十进制整数
var octalNum = 055;//八进制整数
var hexNum = 0x55;//十六进制整数

var floatNum1 = 1.1;//一个浮点数
var floatNum2 = 1.7e10;//浮点数的科学计数法

1.4.2 特殊字面量

除此之外,Number类型还有其他几个特殊的字面量:NaN,Infinity,-Infinity。

NaN(Not a Number)

NaN,表示任何一个计算过程中本来要返回一个Number类型却无法返回Number的值,比如0除以0:

var n =0/0;//这在其他语言中一定会报错,但在JavaScript中并不会这正是因为有NaN
alert(n);//NaN
alert(typeof n);//Number
alert(isNaN(n));//true

注意在代码的最后一行判断一个变量是否是NaN使用的是函数isNaN(),这是因为NaN无法参与运算,它与任何值都不相等包括NaN本身(NaN==NaN永远返回false)。

isNaN()不仅可以运算Number类型,其他数据类型也可以运算,在运算时isNaN()会把其他数据类型转换成Number类型再判断是否是NaN。

-Infinity和Infinity

如果数值计算超过了JavaScript可以表示的数值类型范围,就会得道Infinity和-Infinity,这两个值都无法参与下一次运算。

可以使用isfinity()判断一个数据是否超过了JavaScript的表示范围:

alert(isFinite(10));//true
alert(isFinite(Number.MAX_VALUE+Number.MAX_VALUE));//false

1.5 String

String类型用来表示0个或多个16位Unicode字符序列。

与PHP不同,在JavaScript中使用(")与(')没有任何区别:

 //这两个用法都是合法的没有任何区别
var str1 = "hello world";
var str2 = 'hello world';

var str3 = "hello world';//两边符号不一致,这是不合法的

如果想要拼接两个字符串可以使用操作符(+):

var str1 ="hello";
var str2 = "world";
alert(str1+" "+str2);//hello world

还有一点需要注意,在(")表示的字符串中的(')或者在(')表示的字符串中的(")都将当作正常字符来解析:

var str1 = "his name is 'tom'";
var str2 = 'her name is "lucy"';
       
alert(str1);//his name is 'tom'
alert(str2);//her name is "lucy"

2.基本数据类型之间的转换

基本数据类型之间是可以进行转换的,由于Null,Undefined不能参与运算因此下面主要讨论Boolean,Number,String类型之间的转换

2.1 其他数据类型转换为Boolean

可以使用Boolean()函数将其他数据类型转换为Boolean类型。

Boolean()函数的转换将遵循以下规律:

对于字符串,任何非空字符串都将转换为true:

var str1="hello";//非空字符串
var str2="";//空字符串

alert(Boolean(str1));//true
alert(Boolean(str2));//false

对于Number,除了NaN都将转换为true(包括Infinity):

alert(Boolean(NaN));//false
alert(Boolean(Infinity));//true
alert(Boolean(-Infinity));//true
alert(Boolean(100));//true

2.2 其他数据类型转换为String

2.2.1 Number类型转换为String

对于Number类型可以使用toString()方法:

alert(typeof NaN.toString());//string
alert(typeof Infinity.toString());//string
alert(typeof 1.27e10.toString());//string

toString()还有一个更厉害的用法,它可以传递一个参数指定Number类型的数制:

var num =10;
alert(num.toString(10));//十进制10
alert(num.toString(2));//二进制1010
alert(num.toString(8));//八进制12
alert(num.toString(16));//十六进制a

2.2.2 String()函数

如果是其他数据类型可以使用String()函数,这个函数对于Null类型和Undefined类型也是可以使用的,可以说它通用性更好。

alert(typeof String(undefined));//string
alert(typeof String(null));//String

2.3 其他数据类型转换为Number

2.3.1 Number()函数

可以使用Number()函数将其他数据类型转换为Number类型:

alert(Number(undefined));//NaN
alert(Number(null));//0
alert(Number(true));//1
alert(Number(false));//0
alert(Number("1000"));//1000
alert(Number("1000aa"));//NaN

2.3.2 parseInt()和parseFloat()

Number()函数对于转换字符串不够智能,因此对于字符串通常都是使用parseInt()和paseFloat():

alert(parseInt("1111aaa"));//1111,paseInt()可以提取出字符串中的数字但前提首个字符必须是数字
alert(parseInt("0x11"));//17,parseInt()可以识别其他进制的数字
alert(parseInt("11",16));//17,可以使用第二个参数指定需要转换的字符串的进制

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值