当前位置:首页>>开发编程>>JavaScript>>新闻内容  
在JavaScript中玩变量类型强行转换
作者: 发布时间:2006-3-29 14:13:33 | 【字体:

    我们在C/C++和C#这类强类型语言中,强行转换变量类型简直就是家常便饭。可是JavaScript这个动态类型脚本语言的变量号称是没有类型的,那么我们怎么转换它的变量的类型呢?而且还要强行转换。

    JavaScript的变量确实是没有类型的,就是说你var variable后,可以随便的给variable赋值,不会有任何问题。可是赋给变量的值本身自己却是有类型的,比如:String、Object、Boolean和Number等等。所以JS的变量还是有类型转换的,当然很多时候JS解析引擎会默认处理很多的type convert。不过有的时候也需要我们强行转换数据类型,最常见的就是:''+数字+数字,这种情况来生成字符串累加。

    象:''+数字+数字,这样的语法真的是比较的ugly,想我们在C中使用(int)xxx和C++中int(xxx)来做类型转换多么的清晰明了。其实JavaScript也支持这样的类型转换语法的,例如:

    <script language="javascript">
    
var str = '100';
    
var num = Number(100);
    alert(
typeof(num) + ': ' + num);
    
var obj = Object(str);
    alert(
typeof(obj) + ': ' + obj);
    
var bool = Boolean(str);
    alert(
typeof(bool) + ': ' + bool);

    
var num = 100;
    
var str = String(num);
    alert(
typeof(str) + ': ' + str);
    
var bool = Boolean(num);
    alert(
typeof(bool) + ': ' + bool);
    
var obj = Object(num);
    alert(
typeof(obj) + ': ' + obj);

    
var bool = true;
    
var str = String(bool);
    alert(
typeof(str) + ': ' + str);
    
var num = Number(bool);
    alert(
typeof(num) + ': ' + num);
    
var obj = Object(bool);
    alert(
typeof(obj) + ': ' + obj);

    
var obj = {};
    
var str = String(obj);
    alert(
typeof(str) + ': ' + str);
    
var num = Number(obj);
    alert(
typeof(num) + ': ' + num);
    
var bool = Boolean(obj);
    alert(
typeof(bool) + ': ' + bool);
    
</script>

    除了Number(obj)转换失败,其它强行转换表达式都能取得有意义的转换效果。

    使用强行转换表达式最大的好处就是可以使程序代码变得清晰,为本身就类型混乱的JavaScript编程减少混淆的可能。

    至少我觉得类似:var str = String(3) + String(3); 比 var str = '' + 3 + 3; 表意更清晰。
    还有默认转换比较混乱的地方,比如:"88"-8和"88"+8,前者的默认转换是把字符串转为数字(结果80),而后者又是把数字转为字符串(结果"888")@_@,真是乱。所以使用变量类型强制转换,就可能避免这类默认转换带来的潜在理解出错的问题。

原文地址:http://birdshome.cnblogs.com/archive/2005/02/23/107751.aspx


文章来源:鸟食轩
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我