`

JavaScript类型转换

阅读更多

作为动态语言,JavaScript的类型转换总是在默默地进行着,不为很多人所知。然而,理解好JavaScript的类型转换是理解JavaScript的基础课。其转换机制主要如下:

1)undefined

   ①转换成 字符串

    undefined并不是javascript的保留字,它只是一个初始值为undefined的全局变量,你可以为它定义一个值(当然我不建议你这么做)在遇到字符串场合时,undefined会被自动转换成'undefined';

view plaincopy to clipboardprint?
var test = undefined + '';  
alert(typeof test); //test的值为'undefined',类型为string   
undefined = 'test';  
alert(undefined); //undefined将被定义成字符串'test'   
  
var test = undefined + '';
alert(typeof test); //test的值为'undefined',类型为string
undefined = 'test';
alert(undefined); //undefined将被定义成字符串'test'
 

  ②转换成 数字

  undefined在数字场合将被转换成NaN

view plaincopy to clipboardprint?
var test = undefined - 0;  
alert(test)   //将打印出'NaN',其实这里数字NaN又被转换成了字符串'NaN' 
var test = undefined - 0;
alert(test)   //将打印出'NaN',其实这里数字NaN又被转换成了字符串'NaN' 

    ③转换成布尔类型

     undefined在布尔类型的场合将被转换成false,因此你可以用下面的语句判断一个对象是否存在

view plaincopy to clipboardprint?
var test;  
if(!test){  
  test = 'test';  

var test;
if(!test){
  test = 'test';
}

      当然,也许有人喜欢把让类型转换成为显示的,你可以用下面的方法把undefined转换成boolean类型

view plaincopy to clipboardprint?
var test;  
alert(!!test);  //这里也包含了布尔到字符串的转换(以下不再说明) 
var test;
alert(!!test);  //这里也包含了布尔到字符串的转换(以下不再说明)

    ④转换成 对象

     undefined在对象场合会转换成Error对象

2)null

    null基本与undefined相同,它是JavaScript的关键字,你可以把它理解成对象类型的一个特殊值,它是一个独一无二的值。很多人并不区分对象为undefined和null的区别,实际上他们是有本质的区别的。然而,

alert(null==undefined); 
alert(null==undefined);

将打印出true,从实际应用中,两者都表示缺少值,这正是我们想要的。如果要区分它们,可以用 === 运算符或 typeof 运算符。

①转换成 字符串

  null在字符串场合被转换成字符串'null'

alert(null);  //将打印出'null' 
alert(null);  //将打印出'null'

②转换成 数字

  null在数字场合被转换成 0,这样你便很容易发现,下面的语句将输出Infinity

var test = 2/null;  
alert(test); 
var test = 2/null;
alert(test);

③转换成 布尔型

   null同undefined一样,在布尔环境下被转换成false

if(null || undefined){  
  alert("This will not be execute!");  

if(null || undefined){
  alert("This will not be execute!");
}

④转换成 对象

   null在对象环境中被转换成 Error 对象。

3)非空字符串,如  'abc',"Test"

  ①转换成数字

    非空字符串能被动态的转换成对应的数值或者NaN

var a = '1.23' - 0,  
    b = 'abc' - 0,  
    c = '12ab' - 0,  
    d = '-12' - 0,  
    e = '1.23.4' - 0;  
          
alert(a);  //结果: 1.23  
alert(b);  //结果: NaN  
alert(c);  //结果: NaN  
alert(d);  //结果: -12  
alert(e);  //结果: NaN 
var a = '1.23' - 0,
    b = 'abc' - 0,
    c = '12ab' - 0,
    d = '-12' - 0,
    e = '1.23.4' - 0;
  
alert(a);  //结果: 1.23
alert(b);  //结果: NaN
alert(c);  //结果: NaN
alert(d);  //结果: -12
alert(e);  //结果: NaN

  ②转换成布尔型

  在布尔环境中,非空字符串会被自动转换成true

alert(!!'Test');  //打印的是true 
alert(!!'Test');  //打印的是true

  ③转换成对象

  字符串是JavaScript的基本类型,在对象场合时,其会被转换成String对象。

4)空字符串

  空字符串只是在数字场合会被转换成 0 ,在布尔场合被转换成 false 。其它的处理与非空字符串没有什么区别。

5)数值 (包括 0 NaN 无穷 负无穷 任意其它数字)

  ①转换成 字符串

   字符串场合它们将依次被转换成 '0' 'NaN' 'Infinity' '-Infinity' 数字的字符串值

  ②转换成 对象

   数值会被转换成其对应的封装类型,也就是Number对象。

  ③转换成 布尔

   只有 0 和 NaN 将被认为是false,其它值会被转换成true。因为有这种转换机制在,你可以像写C一样写下面的代码

var a,b;  
if(a=1){  
  b = 2;  
}  
alert(b);  //b的值为2  当条件里为 a=0 时b便成了undefined 
var a,b;
if(a=1){
  b = 2;
}
alert(b);  //b的值为2  当条件里为 a=0 时b便成了undefined

但是这并不同于C,在C99标准前,是没有所谓boolean类型的。C中if语句里是直接接受int型的,而JavaScript则做了一次类型转换。

6)布尔类型 (true 和 false)

  ①转换成字符串

  像很多语言比如java一样,它们会被转换成对应的字符串即'true'和'false'

  ②转换成数字

   你可以像理解C语言一样记忆它,true是1,而false则是0。下面的例子可以帮你理解,但我保证,它们是没有太多实际意义的

alert(true-2);  //没错,结果是-1  
alert(null/true);  //这个运算有意义吗?呵呵,但是它确实显示的是 0  
alert(null-0==false-0);  //很有趣吧,它打印出什么呢? 
alert(true-2);  //没错,结果是-1
alert(null/true);  //这个运算有意义吗?呵呵,但是它确实显示的是 0
alert(null-0==false-0);  //很有趣吧,它打印出什么呢?

  ③转换成对象

  这个我想我不用说了,像字符串转换成String对象,数字转换成Number对象一样,布尔值会被转换成布尔对象,也就是Boolean对象

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ScAREcrOw_ss/archive/2010/06/08/5654391.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics