浅析JavaScript中的隐式类型转换

时间:2024-04-29 13:38:22 

如果把通过函数或方法调用,明确的将某种类型转换成另一种类型称为显示转换 ,相反则称为隐式类型转换 。google和 * 中没有找到“显示类型转换”,“隐式类型转换”的字眼。暂且这么称呼。

一、 运算中存在的隐式类型转换

1, “+”运算符


var a = 11, b = '22';
var c = a + b;


这里引擎将会先把a变成字符串"11"再与b进行连接,变成了"1122"。有人会有疑问,为什么不把b变成数字22再进行算术加运算呢,这样的话c就是33了。没有为什么,当运算符“+”两边一个是数字类型,一个是字符串类型时,js引擎规定进行字符串连接运算而非算术加运算。利用运算符“+”这个特性,可以很方便的将Number转换成String。如


var a = 11;
alert(typeof a); //-->number
a = a + '';
alert(typeof a); //-->string


2,“-”运算符

“-”可以是一元运算符(取负),也可以是二元(减法运算)的。如


var a = 11, b = '5';
var c = a - b;
alert(typeof c); //--> number


这里与上面的“+”相反,会把字符串b隐式的转换成数字5再进行算术减法运算。利用这个特性,可以很方便的将String转换成Number


var a = '11';
a = a - '';
alert(typeof a);// -->number


二、 语句中存在的隐式类型转换

1,if


var obj = {name:'jack'}
if(obj){
    //do more
}


这里会把obj隐式的转换成Boolean类型

2,while


var obj = {name:'jack'}
while(obj){
    //do more
}


同if

3,for in时的类型转换
定义对象字面量时发生从标识符到字符串的隐式转换。


var person = {'name':'jack',"age":20,school:'PKU'};
for(var a in person){
    alert(a + ": " + typeof a);
}


这里name,age分别加单/双引号以强调其为String类型,school没有加单/双引号。我们遍历下该对象的属性,查看其类型。发现school也被隐式的转换成了String类型。

数组的索引其实也是字符串类型。这着实令人惊叹,但事实的确如此。如


var ary = [1,3,5,7];
for(var a in ary){
    alert(a + ": " + typeof a);
}


三、 alert时存在的隐式类型转换


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”显示。

同样的情况发生在数字类型上,如


Number.prototype.fn = function(){return this};
var a = 10;
alert(typeof a.fn());//-->object
alert(a.fn()); //-->10


a.fn()返回的是对象类型,但在alert(a.fn())时会隐式的将其转换成数字。

标签:JavaScript,隐式类型转换,类型转换
0
投稿

猜你喜欢

  • js滑动展开与折叠效果(收缩)

    2007-10-09 13:17:00
  • Django contenttypes 框架详解(小结)

    2023-11-13 14:39:47
  • python 3利用Dlib 19.7实现摄像头人脸检测特征点标定

    2022-07-31 05:54:21
  • Go语言通过WaitGroup实现控制并发的示例详解

    2023-06-29 01:04:27
  • ES6学习笔记之正则表达式和字符串正则方法分析

    2024-04-18 10:00:23
  • 使用python实现excel的Vlookup功能

    2023-05-01 20:15:15
  • 详细介绍基于MySQL的搜索引擎MySQL-Fullltext

    2024-01-27 16:30:30
  • Python正则表达式常用函数总结

    2023-07-27 12:37:41
  • Scripting.Dictionary 对象

    2007-10-13 09:46:00
  • Python进程间的通信一起来了解下

    2022-10-27 01:41:30
  • php 获取远程网页内容的函数

    2024-06-07 15:28:27
  • Python实现telnet服务器的方法

    2023-01-21 22:45:18
  • python 如何查看pytorch版本

    2021-02-05 05:38:59
  • python3 循环读取excel文件并写入json操作

    2022-11-07 15:40:11
  • 解决PyCharm中光标变粗的问题

    2022-10-24 15:47:32
  • Python利用zhdate模块实现农历日期处理

    2023-03-07 22:10:20
  • Pandas统计重复的列里面的值方法

    2022-03-06 20:20:57
  • javascript 精确获取样式属性(上)

    2024-04-17 09:45:37
  • Python使用pyenv实现多环境管理

    2022-10-23 00:18:23
  • Python爬虫爬取微信朋友圈

    2021-11-12 17:38:14
  • asp之家 网络编程 m.aspxhome.com