源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅析JavaScript中的隐式类型转换

  • 时间:2020-12-20 16:37 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅析JavaScript中的隐式类型转换
如果把通过函数或方法调用,明确的将某种类型转换成另一种类型称为显示转换 ,相反则称为隐式类型转换 。google和维基百科中没有找到“显示类型转换”,“隐式类型转换”的字眼。暂且这么称呼。 [b]一、 运算中存在的隐式类型转换 [/b] [b]1, “+”运算符 [/b]
[u]复制代码[/u] 代码如下:
var a = 11, b = '22'; var c = a + b;
这里引擎将会先把a变成字符串"11"再与b进行连接,变成了"1122"。有人会有疑问,为什么不把b变成数字22再进行算术加运算呢,这样的话c就是33了。没有为什么,当运算符“+”两边一个是数字类型,一个是字符串类型时,js引擎规定进行字符串连接运算而非算术加运算。利用运算符“+”这个特性,可以很方便的将Number转换成String。如
[u]复制代码[/u] 代码如下:
var a = 11; alert(typeof a); //-->number a = a + ''; alert(typeof a); //-->string
[b]2,“-”运算符[/b] “-”可以是一元运算符(取负),也可以是二元(减法运算)的。如
[u]复制代码[/u] 代码如下:
var a = 11, b = '5'; var c = a - b; alert(typeof c); //--> number
这里与上面的“+”相反,会把字符串b隐式的转换成数字5再进行算术减法运算。利用这个特性,可以很方便的将String转换成Number
[u]复制代码[/u] 代码如下:
var a = '11'; a = a - ''; alert(typeof a);// -->number
[b]二、 语句中存在的隐式类型转换[/b] [b]1,if [/b]
[u]复制代码[/u] 代码如下:
var obj = {name:'jack'} if(obj){     //do more }
这里会把obj隐式的转换成Boolean类型 [b]2,while [/b]
[u]复制代码[/u] 代码如下:
var obj = {name:'jack'} while(obj){     //do more }
同if [b]3,for in时的类型转换 [/b]定义对象字面量时发生从标识符到字符串的隐式转换。
[u]复制代码[/u] 代码如下:
var person = {'name':'jack',"age":20,school:'PKU'}; for(var a in person){     alert(a + ": " + typeof a); }
这里name,age分别加单/双引号以强调其为String类型,school没有加单/双引号。我们遍历下该对象的属性,查看其类型。发现school也被隐式的转换成了String类型。 数组的索引其实也是字符串类型。这着实令人惊叹,但事实的确如此。如
[u]复制代码[/u] 代码如下:
var ary = [1,3,5,7]; for(var a in ary){     alert(a + ": " + typeof a); }
[b]三、 alert时存在的隐式类型转换 [/b]
[u]复制代码[/u] 代码如下:
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”显示。 同样的情况发生在数字类型上,如
[u]复制代码[/u] 代码如下:
Number.prototype.fn = function(){return this}; var a = 10; alert(typeof a.fn());//-->object alert(a.fn()); //-->10
a.fn()返回的是对象类型,但在alert(a.fn())时会隐式的将其转换成数字。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部