关于javascript中数据类型的一些小结
ECMAScript中有5种简单数据类型(也叫基本数据类型):Undefined,Null,Number,String,Boolean。还有一种复杂的数据类型———Object,Object本质是有一组无序的键值对组成的。ECMAScript不支持任何创建自定义类型的机制,而所有值最终都将是上述6种数据类型之一。因为ECMAScript数据类型具有动态性,因此的确没有必要再定义其他类型数据的必要了。
在判断给定变量的数据类型时候,就要用到typeof了(注:typeof是一个操作符而不是函数)。使用typeof 操作符可能返回下列某个字符串:
“undefined”——————如果这个值没有定义;
“boolean”——————如果这个值是布尔值;
“string”——————如果该值为字符串;
“number”——————如果该值为数值或NaN;
“object”——————如果这个值是对象或Null;
“function”——————如果这个值为函数。
例如:
1 var str = 'something'; 2 alert(typeof str); //string 3 alert(typeof (str)); //string 4 alert(typeof 99); //number
例子表明:typeof操作符的操作数可以是变量(str),也可以是数值字面量。注意:typeof是一个操作符而不是函数,因此例子中的圆括号尽管可以使用,但不是必须的。
下面分别介绍一下这几种数据类型的一些特点:
1、Undefined类型
Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化的时候,这个变量的值就是undefined,例如:
<script type="text/javascript"> var message ; alert(message); //undefined; alert(message == undefined);//true var a = undefined; alert(a == undefined);//true alert(a);//undefined </script>
注:这个例子的undefined显式初始化了变量a。但是我们没有必要这么做,因为未经初始化的值默认就会取得undefined的值(例如:例子中的message)。
另外,此处还有一点需要注意
1 <script type="text/javascript"> 2 var message ; 3 alert(message); //undefined; 4 alert(message == undefined);//true 5 alert(a);//此处a没有定义,也没有声明,浏览器会报错Uncaught ReferenceError: a is not defined 6 </script>
但是,令人困惑的是:对未初始化的变量执行typeof操作符会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回undefined值。
1 <script type="text/javascript"> 2 var message ; 3 alert(typeof message); //undefined; 4 alert(typeof a);//undefined; 5 </script>
结果表明,对未初始化和未声明的变量执行了typeof操作符都返回了undefined;这个结果有其逻辑上的合理性。因为虽然这两种变量从技术角度看有本质的区别,但是实际上无论对哪种变量也不可能执行真正的操作。
2、Null类型
Null类型是第二个只有一个值的数据类型(这点和undefined一样),这个特殊的值是null;从逻辑上讲,null值表示一个空对象指针,这也是为什么用typeof操作符检测null为object的原因所在。typeof null 会返回 object。
实际上,undefined值是派生自null值的,因此ECMA-262规定他们的相等性测试要返回true;
alert(null==undefined); //true
尽管null和undefined有这样的关系,但是他们的用途大不相同,如前述,在任何情况下都没有必要把一个变量的值显示的设置为undefined,可是同样的规则对null不适用,换句话说,只要意在保存对象的变量还没有真正的保存对象,就应该明确的为该变量保存null值,这样做不仅可以体现null作为空指针的惯例,而且还有助于进一步区分null和undefined。
3、Boolean 类型
- 1楼刘跃吉
- 未完。。。