在javaScript中,有五种简单的数据类型,分别是
- Undefined
- Null
- Boolean
- Number
- String
还有一种复杂的数据类型object,object本质是有一组无序的名值对组成的。
typeof
由于ECMAScript是松散类型的,所以提供一种手段来检测数据类型--typoof。
Undefined
在一个变量被声明还未被赋值的时候,你检测它的类型,会是undefined;或者你拿它和undefined直接做比较,它也会返回ture
var massage;
console.log(typeof(massage))//undefined
console.log(massage==undefined)//ture
这一点很重要,因为在后面我们会了解到作用域和变量提升的知识,然后会告诉你定义一个变量最先会被解释为“undefined”,其原理就是undefined的最初定义,请参看《javascript高级程序设计》p24.
说到这里,我想起了以前我做一个项目的时候因为undefined踩的坑。
var str1;
str1+='<li><a href="'
+list[i].StuLink+
'"><div class="ranking mt5 mr5 white HihgLight">'
+a+
'</div>'
+list[i].StuName+
'</a></li>';
这是我当时需要把数据拼接起来,可是每次的第一条数据都是返回undefined,当时找了好久都不知道为什么。结果原来是要给str1先赋一个值,比如
var str1='';
这样浏览器就不会把它解析为undefined了。
然后注意一个细节的点
在一个变量未被声明的时候,会产生错误,但typeof会返回undefined
var massage;
var age
console.log(massage);//undefined
console.log(age);//产生错误
console.log(typeof(massage));//undefined
console.log(typeof(age))//undefined
所以一定要注意记得初始化变量,不然你typoof不能判断变量是否已经初始化。
undefined==null的问题
null类型也只有一个值,即null。undefined实际上是从null派生而来的,因此ECMAScript把他们定义为相等的。
alert(null == undefined); //output "true"
alert(null === undefined); //output "false"严格比较符不发生转化
尽管两个值相等,但是他们的含义却不一样,undefined是声明了变量但为对其初始化时赋予该变量的值,null则用于表示尚未存在的对象。如果函数要返回的是对象,那么找不到该对象时,返回的通常是null。