鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 424, 文章 - 231, 评论 - 5394, 引用 - 344
数据加载中……

在JavaScript中也玩变量类型强行转换

    我们在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"></script>

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

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

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

posted on 2005-02-23 00:55 birdshome 阅读(28304) 评论(24)  编辑 收藏 所属分类: Jscript&Dhtml开发

评论

#1楼    回复  引用  查看    

效率:)

#2楼    回复  引用  查看    

楼上所说的是不是在某种情况下强行转换会提高执行效率?
2005-03-01 09:00 | ocean      

#3楼 [楼主]   回复  引用  查看    

可能能有一点点效率的好处,这里我没有仔细地去考虑,我觉得强行转换类型,更多的是为了让代码清晰。比如:
var a = '100+ 100;
var b = 100 + '100';
这里的a==b,都是'100100'。可是如果是:
var a = '100+ 100 + 100;
var b = 100 + 100 + '100';
var c = 100 + '100+ 100;
就比价让人迷惑了(a = '100100100',b = '200100',c = '100100100')。
2005-03-01 10:29 | birdshome      

#4楼    回复  引用  查看    

date 类型也可以吗? 测试ing
2005-03-07 12:14 | ken@28      

#5楼    回复  引用    

JavaScript中没有整型和浮点数之分,以及字符串转数字用Number()是没有用的
所以这种做法未必有效
2005-05-21 11:21 | ShiningRay [未注册用户]

#6楼 [楼主]   回复  引用  查看    

@ShiningRay
    概念性错误,JavaScript的变量没有类型,并不是说JavaScript就没有数据类型之分了。Integer和float是完全不同的,虽然在JavaScript中都叫做Number了。
    同时JavaScript还提供了parseInt和parseFloat两个方法,怎么说JavaScript中没有Integer和float之分呢?!
2005-05-21 13:28 | birdshome      

#7楼    回复  引用  查看    

确实有可以借鉴的地方!
2005-07-19 19:25 | 轩辕剑      

#8楼    回复  引用  查看    

@birdshome
我错了吗?
今天刚看到这个东西
我的意思是,正是因为JavaScript对待整型和浮点数都用Number对象,所以Number()强制转换是不行的
2005-08-07 17:01 | ShiningRay      

#9楼 [楼主]   回复  引用  查看    

@ShiningRay
麻烦您能讲讲有什么问题吗?为什么不行?
2005-08-07 17:10 | birdshome      

#10楼    回复  引用  查看    

我解释了一下
http://shiningray.cnblogs.com/archive/2005/07/27/200763.html
2005-08-22 00:46 | ShiningRay      

#11楼    回复  引用    

var str = '100';
var num = Number(100);
这句怎么回事? 应该是var num = Number(str)吧? 不过这种写法据我同事的测试说不行, 我还没验证过
2005-12-18 18:48 | songofwind [未注册用户]

#12楼    回复  引用  查看    

应该用 parseInt 或者 parseFloat
2005-12-18 19:03 | ShiningRay      

#13楼    回复  引用  查看    

Number('some number')是可以使用的。不过
语句:var num = Number('100'); 在我这里会报错(IE6.0),
但可以使用var num = new Number('100');
2006-02-16 17:24 | 生命体验之kevin-Y      

#14楼 [楼主]   回复  引用  查看    

@kevin-Y
报错的详细信息是什么?
2006-02-16 21:24 | birdshome      

#15楼    回复  引用    

可以直接用Number()进行转换的,只要你输入的是数字
2006-05-31 17:16 | microbian [未注册用户]

#16楼    回复  引用    

Number()是可以使用的,如果参数是数字的话,得到的结果就是这个数字,如果输入的不是数字的话,得到的就是NaN。
2006-06-24 12:40 | 牛雄 [未注册用户]

#17楼    回复  引用    

var s="12345678";
怎样将其中的一位进行类型转换转化
并做到进行除法运算?
2006-07-15 11:04 | liouook [未注册用户]

#18楼 [楼主]   回复  引用  查看    

@ liouook
var s = '12345678';
var div = s/4;
// 默认会转换,不过过多的依赖默认转换会让javascript这样弱类型的语言后期的debug变得困难,所以本文才讨论了javascript中的显式类型转换。
2006-07-15 12:37 | birdshome      

#19楼    回复  引用    

请问我怎么能够将以个字符变量转换成jfeechart类型呢?
谢谢!
2006-09-12 11:32 | liuxiaoxiao [未注册用户]

#20楼    回复  引用    

谢谢分享。
2007-04-10 13:54 | bill [未注册用户]

#21楼    回复  引用    

@birdshome
有啥迷惑的,JS是计算一个表达式的时候是从左到右计算的,如果一个表达式计算到一个字符串的时候,后面的变量或对象都将转换成字符串并执行字符串串联。
依照上述原则:
var a = '100'(开始变成字符串了) + 100 + 100;
var b = 100 + 100 + '100'(开始变成字符串了);
var c = 100 + '100'(开始变成字符串了) + 100;
2008-01-28 10:27 | abent [未注册用户]

#22楼    回复  引用    

今天正好遇到这样一个问题

Number Object String 类型固然可以转

如果我要把一个字符串"function(){}"转成 Function类型怎么转 ??

js有6种类型变量,我是想知道解决办法 谢谢
2008-06-12 18:35 | aaasssddd [未注册用户]

#23楼    回复  引用    

奥 可以转了
定义名为anonymous()
2008-06-12 18:38 | aaasssddd [未注册用户]