数据类型(上)

ECMAScript中有5种简单数据类型:Undefined、Null、Boolean、   Number、和String。还有一个复杂数据类型--Object。

ECMAScript不支持任何创建自定义类型的机制,所以值都成为以上6中数据类型之一。

一.typeof操作符


  typeof操作符是用来检测变量 数据类型,对于值或者变量所以typeof
  操作符会返回如下字符串:

         var box;
	 alert(typeof box);  //box是Undefined类型,值是undefined,类型返回的字符串是undefined

        var box=true;
	 alert(typeof box);  //box是Boolean类型,值是true,类型返回的字符串是boolean

	 var box=100;
	 alert(typeof box);  //box是Number类型,值是100,类型返回的字符串是number

	 var box='秦肯';
	 alert(typeof box);  //box是String类型,值是秦肯,类型返回的字符串是String

	 var box=null;
	 alert(typeof box);  //box是Null类型,值是null,类型返回的字符串是Object

         var box={};
	 alert(typeof box);  //box是Object类型,值是[object Object],类型返回的字符串是Object
      
	  var box=new Object; 
	 alert(box);  //box是Object类型,值是[object Object],类型返回的字符串是Object
      
	  function box(){

	  }
	 alert(typeof box);  //box是Function类型,值是function box(){},类型返回的字符串是function

  typeof 操作符可以操作变量,也可以操作字面量。虽然也可以这样使用:typeof(box),但是 typeof是操作符而非内置函数。


  ps:函数在ECMAScript中是对象,不是一种数据类型。所以,使用typeof来区分function和object是非常有必有的。

 

二.  Undefined类型

  Undefined类型只有一个值,即特殊的undefined.在使用var声明变量,但没有对其初始化时,这个
  变量的值就是undefined。
 

var box;
  alert(box);

  var box=undefined;   //没有必要
  alert(box)  

 
 
ps:我们没有必要显示给一个变量赋值为undefined,因为没有赋值的变量会隐式的(自动的)赋值为
  undefined;而undefined主要的目的是为了用于比较,ECMAScript第3版之前并没有引入这个值,
  引入之后为了正式区分空对象与未经初始化的变量。

  未初始化的变量与根本不存在的变量(未声明的变量)也是不一样的。

 

 var box;
  alert(age);  //age is not defined
 
  var box;
  alert(typeof box);   //undefined
  alert(typeof age);  //undefined

 

  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);  //它们都是空的,所以true
    
 alert(undefined===null);  //数据类型必须相等才可以

 由于undefined和null两个值的比较是相等的,所以,未初始化的变量和赋值为null的变量会相等。

这时,可以采用typeof变量的类型进行比较。但是建议还是养成编码的规范,不忘记初始化变量。

 

alert(typeof undefined==typeof null);     //false

 四.Boolean类型

Boolean类型有两个值(字面量):true和false.而true不一定等于1,false不一定等于0,Javascript是区分
大小写的,True和False或者其他都不是Boolean类型的值。

     var box=true;
     alert(typeof box);   //Boolean

  

虽然Boolean类型的字面量只有true和false两种,都是ECMAScript中所以的类型值都是与这两个Boolean
值等价的值。要将一个值转换为其对应的Boolean值,可以使用转型函数Boolean()。

var hello="hello world";
	var hello1=Boolean(hello);
	alert(typeof hello1);//Boolean*/

  

上面是一个显示转换,属于强制行转换。而实际应用中,还有一种隐式转换。比如:
在if条件语句里面的条件判断,就存在隐式转换。

var hello="";
   if(hello){
     alert("真");
   }else{
     alert("假");
   }

  

posted @ 2016-08-20 18:06  IT温故而知新  阅读(176)  评论(0编辑  收藏  举报