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
a.fn()返回的是对象类型,但在alert(a.fn())时会隐式的将其转换成数字。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值