学习要点:
1.typeof 操作符
2.Undefined 类型
3.Null 类型
4.Boolean 类型
ECMAScript 中有 5 种简单数据类型:Undefined、Null、Boolean、Number 和 String。
还有一种复杂数据类型——Object。
ECMAScript 不支持任何创建自定义类型的机制,所有值都成为以上 6 中数据类型之一。
一.typeof 操作符
typeof 操作符是用来检测变量的数据类型 。对于值或变量使用 typeof 操作符会返回如下字符串。
var box = '李炎恢';
alert(typeof box);
alert(typeof '李炎恢');
typeof 操作符可以操作变量,也可以操作字面量。虽然也可以这样使用: typeof(box),但,typeof 是操作符而非内置函数。PS:函数在 ECMAScript 中是对象,不是一种数据类型。所以,使用 typeof 来区分 function 和 object 是非常有必要的。
二.Undefined 类型
Undefined 类型只有一个值,即特殊的 undefined。
在使用 var 声明变量,但没有对其初始化时,这个变量的值就是 undefined。
var box;
alert(box);
PS:我们没有必要显式的给一个变量赋值为 undefined,因为没有赋值的变量会隐式的(自动的)赋值为 undefined;
而 undefined 主要的目的是为了用于比较 ,ECMAScript 第 3 版之前并没有引入这个值,引入之后为了正式区分空对象与未经初始化的变量。
未初始化的变量与根本不存在的变量 (未声明的变量)也是不一样的。
var box;
alert(age); //age is not defined
PS:如果 typeof box,typeof age 都返回的 undefined。
从逻辑上思考,他们的值,一个是 undefined,一个报错;他们的类型,却都是 undefined。
所以,我们在定义变量的时候,尽可能的不要只声明,不赋值。
三.Null 类型
Null 类型是一个只有一个值的数据类型,即特殊的值 null。
它表示一个空对象引用(指针),而 typeof 操作符检测 null 会返回 object。
var box = null;
alert(typeof box);
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null。
这样,当检查 null 值就知道是否已经变量是否已经分配了对象引用了。
var box = null;
if (box != null) {
alert('box 对象已存在!');
}
有个要说明的是:undefined 是派生自 null 的,因此 ECMA-262 规定对它们的相等性测试返回 true。
alert(undefined == null);
由于 undefined 和 null 两个值的比较是相等的,所以,未初始化的变量和赋值为 null 的变量会相等。
这时,可以采用 typeof 变量的类型进行比较。但,建议还是养成编码的规范,不要忘记初始化变量。
var box;
var car = null;
alert(typeof box == typeof car)
四.Boolean 类型
Boolean 类型有两个值(字面量):true 和 false。
而 true 不一定等于 1,false 不一定等于 0。
JavaScript 是区分大小写的,True 和 False 或者其他都不是 Boolean 类型的值。
var box = true;alert(typeof box);
虽然 Boolean 类型的字面量只有 true 和 false 两种,但 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值。
要将一个值转换为其对应的 Boolean 值,可以使用转型函数Boolean()。
var hello = 'Hello World!';
var hello2 = Boolean(hello);
alert(typeof hello);
上面是一种显示转换 ,属于强制性转换 。
而实际应用中 ,还有一种隐式转换 。比如,在if 条件语句里面的条件判断,就存在隐式转换。
var hello = 'Hello World!';
if (hello) {
alert('如果条件为 true,就执行我这条!');}
else {
alert('如果条件为 false,就执行我这条!');}
//box是Undefined类型,值是undefined,类型返回的字符串是undefined
var box;
alert(typeof box);
//box是Boolean类型,值是true,类型返回的字符串是boolean
var box = true;
alert(typeof box);
//box是String类型,值是'周一',类型返回的字符串是bstring
var box = '周一';
alert(typeof box);
//box是Number类型,值是123,类型返回的字符串是number
var box = 123;
alert(typeof box);
//空的对象,标示这个对象创建了,里面没东西
//空对象,标示没有创建,就是一个null
//box是Object类型,值是[object,Object],类型返回的字符串是object
var box = {};
alert(typeof box);
//box是Null类型,值是null,类型返回的字符串是object
var box = null;
alert(typeof box);
//box是Function函数,值是function box(){},类型返回的是function
function box(){
};
alert(typeof box);
//可以直接使用字面量查看类型
alert(typeof new Object());
var box = {};
if(box != null){ //不等于null,说明不是空对象
alert("对象已经创建成功!");
}
//这个表示,你还没有创建对象,但先声明了对象引用而必须初始化的结果
//你还没来得急创建对象,先声明一个对象放在那边,默认初始化为null
var box = null;
//他们都是空的,所以相等理所当然
alert(undefined == null);
//数据类型也必须相等才可以
alert(undefined === null);