JavaScript是一种动态语言,数据类型一共只有6种,它们是:Number,String,Boolean,Object,Undefined,Function。
如果你用typeof去判断这几种类型的变量,你会得到相应的字符串结果:number,string,boolean,object,function, undefined。
1. Undefined 类型
如果你只是用var声明一个变量,并未赋值,那么这个变量的值就是undefined。
var a;
alert( a === undefined ); // true
alert( b ); // 导致错误,因为没有声明
alert(typeof b)// undefined
建议养成初始化变量的习惯,这样就可以减小开发中的错误,遇到undefined的变量,我们就一定认为还没有声明。
2. Number 类型
JS中没有int或者float这样的类型,唯一可以表示数字的就是Number类型,它可以表达不仅十进制,还有八进制和十六进制。
var intNum = 1; // 十进制整数
var floatNum = 1.1 或者 .1(不建议这样写) // 十进制小数
var octNum = 070 // 八进制数
var hexNum = 0xff // 十六进制数
var eNum = 123e5 // 科学计数法,等于123*10的5次指数幂
Number类型嫩各表示的最大数值是由Number.MAX_VALUE(1.7976931348623157e+308),最小数值是Number.MIN_VALUE(5e-324)。如果你的计算结果超出了JS能表示的最大值和最小值,那么将得到Number.NEGATIVE_INFINITY(-Infinity)和Number.POSITIVE_INFINITY(Infinity),即负无穷大和正无穷大。如果去判断计算结果是否超出范围呢,我们可以用JS自带的函数isFinite()去判断,如果超出了数值范围,将返回ture。
NaN的意思是Not a Number。如果在计算时候返回了非数字的结果,不会抛出异常而是返回NaN。
比如用Number('0.1a')就会返回NaN,除0异常也会返回NaN。
NaN不会等于任何值,包括它自己,如果你用alert(NaN == NaN)会得到false。所以我们通常只能用isNaN()去判断是否得到了NaN的结果,isNaN(NaN)得到ture,isNaN(1)得到false。
关于数字的转换,JS提供了三个函数Number(),pareseInt()和parseFloat()。
Number的转换规则如下:
true和false -> 1和0
数值 -> 数值
null -> 0
undefined -> NaN
数字字符串 -> 相应的数值(011会转换成11,空字符串会转换成0,如果含有非数字的字符转换成NaN)
对象 -> 先调用其valueOf方法,如果返回值不能按照上诉规则进行转换,即转换结果为NaN,那么在调用toString方法进行转换
例:var o = Object();
o.valueOf = function() {
return 5;
}
Number(o); // 得到5
parseInt的转换规则如下:
"11abc" -> 11 // 从第一个字符开始解析,直到遇到非数字字符
"1.1ab" -> 1 // 解析到小数点停止
"0xFF" -> 255 // 将十六进制转换成十进制
"010" -> 8 // 八进制也会同样被转换成十进制
"10" -> 10 // 前面没有0,直接解析成十进制
parseInt还有第二个参数,用来告诉函数以什么样的基数来解析。parseInt(10, 8)会将10以八进制来解析,于是就得到了8。同样我们还可以指定第二个参数为10或者16,道理一样。如果你非要用5做基数,那么将得到5进制的数字,只要你觉得对你来说有意义的话。为了保证结果的准确性,建议使用第二个参数。
parseFloat和parseInt类型,但是也有不同的地方:
parseFloat没有第二个参数,它只以十进制为基数来解析;
pareseFloat会认为第一个小数点有效,后面的就无效了;
对于十六进制的数字,始终返回0
会忽略前面的所有0,八进制数字也是如此(077转换成77)
3 Boolean 类型
布尔类型只有两个值true和false,区分大小写。
var found = true;或者
var found = false;
对于其他类型的值,也可以转化成布尔类型,显示的转化方式:var found = Boolean( otherTypeValue );
具体的转换规则如下:
String 类型:空字符串转化成false,其他字符串转化成true
Number 类型:非零数字值转换成true,0转换成false,NaN也会转换成fasle
Undefined 类型:总是转成成false
Object 类型:任何对象都会转换成true,null对象会转换成false
4 String 类型
字符串就是用双引号或者单引号表示的一串字符序列。不论你使用哪种引号,但是必须配对。
字符串有一个length属性,可以取出字符串中的字符个数。
字符串的转换有两种方式toString()和String(),大多数数据类型都具有toString()方法,可以返回类型转化后的字符串的副本,toString还可以传入一个参数作为数字类型转换时候的基数,比如2,8,10会分别以二进制,八进制,十进制的方式进行转换。
var n = 10;
n.toString(2); // 得到1010
String()的功能类似:
String(n); // 得到10
如果传给String()的参数是null或者undefined,那么将得到'null'和'undefined'的字符串结果。
5 Null 类型
Null类型唯一的值就是null,前面提到如果声明变量但是不进行初始化,那么这个变量就会是undefined。对于null,我们通常的做法是将null赋值给那些将来会用来引用对象的变量。如果一个变量是null,那么我们就认为这个变量还没有引用任何对象。这只是一个建议的编程习惯,而不是语法规定。
我们用typeof null会得到'object',而typeof undefined会得到'undefined',所以他们的类型是不一样的。但是如果用null == undefined可以得到true,null === undefined会得到false。
6 Object 类型
Object对象是所有对象的基础,具有最基本的属性和方法,是最轻量级的对象。
我们通常用new操作符创建一个新的对象:
var o = new Object();
不想要带任何参数,此时o就具备最基本的对象的特征了:
valueOf() 返回对象的表示。
toString() 返回对象的字符串表示,'[object Object]'
constructor 对构造函数的引用,如Object()
hasOwnProperty(propertyName) 判断属性是否属于自身实例,而不是从原型继承的