Javascript 数据类型
Javascript是一种弱类型语言,没有明确的类型分类;网上分类的方式比较多,个人感觉不必去特别的追究细分是什么什么类型,若是能够明确的分出类型的话,javascript就不是弱类型语言,无论怎样分类只要有助于自己的理解,能够方便,正确灵活的使用就可以了;下面是两种常见的分类方式和一些必须了解的基础用法知识;
一、第一种分类方式,也是比较常见的一种分类方法:
分为9种类型:分别是Undefined,Boolean,Object,Number,Null,String,下面一一介绍;
1、Undefined 类型:是全局对象window的一个特殊属性,顾名思义就是未定义的意思;Undefined类型只有一个值Undefined,表示一个变量定义了但未赋值;
如:var a; alert(a); // 弹出undefined;
下面是几种常见的会出现undefined的情况:
(1)获取一个对象的属性(原本属性和protoType扩展的属性)不存在时,返回undefined;
(2)当一个函数function(){}没有明确的返回值时,显示undefined,例子:function way(){} alert(way());//弹出undefined;
(3)javascript中的参数有多个形参的话,若果调用参数的话,参数数量小于形参数量,那么其他的参数值就为undefined;
2、Null类型:null是javascript保留的关键字,null类型也只有一个null值,表示为空或者不存在的对象引用;
(1)javascript中的if()判断语句无论是null类型还是undefined类型他们的返回值都是false,也就是说一个变量若是null 或者undefined那么他就为false;
[](javascript:void(0); "复制代码")
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">if (null){
alert("sdf");//进入不了
} if (undefined){
alert("sdfsdf");//进入不了
} var a=12; if (a){
alert("sdf"); //能进入
}</pre>
](javascript:void(0); "复制代码")
3、Number类型:表示数值,包含了所有的数值类型,不像高级语言那么细分成int,double,deciable,他的取值范围是:1.7976931348623157E+308到-1.7976931348623157E+308之间,就是1.797693134862315710的308次方到-1.797693134862315710的308次方之间;Number类型有一个特殊的值NaN,他是Number类型中一个非数值的值,就像无穷大,所以NaN不等于NaN;
4、Object类型:用来表示一个对象,像String, Array,new 一个对象等,当这个对象为空时,就是null了;所以alert( typeof(null))的弹出值为object;
5、String类型:string类型是javascript中的一个比较重要的类型,它用来表示一个字符串,我们在写脚本的时候需要处理很多的字符串,所以javascript库中也提供了很多字符串处理方法,网上已有很多资料了,这里就不一一细说了;
6、Boolean类型:布尔类型大家都很熟悉,这里说几个他的特殊用法:(1)boolea类型和Number类型相结合时,true转化为1,false转化为0;
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">var a = true;
alert(a+1);//弹出2
var a = true;
alert(a);//弹出true</pre>
上述六种类型也可以相互转化,基本上是数值和字符串和布尔值之间的转化:
(1) Number类型转化为string类型,用tostring();
(2) String类型转化为Number,用Number();
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">var str = "123"; var num = 1;
alert(str + num);//弹出1231
alert(Number(str)+num) //弹出124</pre>
也可以使用全局函数parseInt()和parseFloat()来进行转换;parseInt()和parseFloat()的区别是Number()转换是整个值,而parseInt()和parseFloat()则可以只转换开头的数字部分。
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">alert(Number("123asdf"));//弹出NaN
alert(Number("1.2.3"))//弹出NaN
alert(parseInt("123sdf"));//弹出123
alert(parseFloat("sdfsdf"));//弹出NaN
alert(parseInt("sdf345"))//弹出NaN</pre>
Number()在转化的过程中布尔类型的true和false分别被转化为1和0其他的不能转化为数值的全部转化NaN。
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">alert(Number(true));//弹出1
alert(Number(false));//弹出0
alert(Number(null));//弹出0</pre>
其他的若是不能转化为数值类型的,基本上全转化为NaN。