JavaScript中的隐式类型转换
如果把通过函数或方法调用,明确的将某种类型转换成另一种类型称为显示转换 ,相反则称为隐式类型转换 。google和维基百科中没有找到“显示类型转换”,“隐式类型转换”的字眼。暂且这么称呼。
一、 运算中存在的隐式类型转换
1, “+”运算符
1 2 | var a = 11, b = '22' ; var c = a + b; |
这里引擎将会先把a变成字符串"11"再与b进行连接,变成了"1122"。有人会有疑问,为什么不把b变成数字22再进行算术加运算呢,这样的话c就是33了。没有为什么,当运算符“+”两边一个是数字类型,一个是字符串类型时,js引擎规定进行字符串连接运算而非算术加运算。利用运算符“+”这个特性,可以很方便的将Number转换成String。如
1 2 3 4 | var a = 11; alert( typeof a); //-->number a = a + '' ; alert( typeof a); //-->string |
2,“-”运算符
“-”可以是一元运算符(取负),也可以是二元(减法运算)的。如
1 2 3 | var a = 11, b = '5' ; var c = a - b; alert( typeof c); //--> number |
这里与上面的“+”相反,会把字符串b隐式的转换成数字5再进行算术减法运算。利用这个特性,可以很方便的将String转换成Number
1 2 3 | var a = '11' ; a = a - '' ; alert( typeof a); // -->number |
二、 语句中存在的隐式类型转换
1,if
1 2 3 4 | var obj = {name: 'jack' } if (obj){ //do more } |
这里会把obj隐式的转换成Boolean类型
2,while
1 2 3 4 | var obj = {name: 'jack' } while (obj){ //do more } |
同if
3,for in时的类型转换
定义对象字面量时发生从标识符到字符串的隐式转换。
1 2 3 4 | var person = { 'name' : 'jack' , "age" :20,school: 'PKU' }; for ( var a in person){ alert(a + ": " + typeof a); } |
这里name,age分别加单/双引号以强调其为String类型,school没有加单/双引号。我们遍历下该对象的属性,查看其类型。发现school也被隐式的转换成了String类型。
数组的索引其实也是字符串类型。这着实令人惊叹,但事实的确如此。如
1 2 3 4 | var ary = [1,3,5,7]; for ( var a in ary){ alert(a + ": " + typeof a); } |
三、 alert时存在的隐式类型转换
1 2 3 4 | String.prototype.fn = function (){ return this }; var a = 'hello' ; alert( typeof a.fn()); //-->object alert(a.fn()); //-->hello |
给String原型上添加了个fn方法,该方法返回this,我们知道this可以理解成当前类的实例对象,既然是对象那么typeof a.fn()自然返回是object了。
关键是最后的alert(a.fn()),a.fn()返回的明明是对象,但却隐式的转换成了字符串“hello”显示。
同样的情况发生在数字类型上,如
1 2 3 4 | Number.prototype.fn = function (){ return this }; var a = 10; alert( typeof a.fn()); //-->object alert(a.fn()); //-->10 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端