JavaScript学习笔记——隐式类型转换

27 篇文章 0 订阅
24 篇文章 0 订阅

之前在总结数据类型的同时总结了一些显示类型转换的方法。熟悉显式类型转换后,能对隐式类型转换有更深入的理解,在实际开发中避免踩坑。

一个问题

在实际开发或面试中如果遇见两个数字字符串相加,如‘123’+‘456’,怎么快速的得到计算结果?
众所周知,如果 “+”两边一个是字符串或者两个都是字符串,会进行拼接,而不是相加。运算之前,必先进行类型转换,根据以前的知识,可通过Number(‘123’) + Number(‘456’)得到结果。理解隐式类型转换后能更简单的得到结果。

隐式类型转换

1. isNaN( )

《JS基本数据类型——Number》中提到,isNaN()函数用来判断参数是否”不是数值“,isNaN()在接收到一个值后,会尝试将这个值转换为数值,任何不能转换为数值的值都会返回true。
尝试将这个值转换为数值,就是这个函数牵扯到的隐式转换。
执行此函数,会先将参数传入Number( ),再判断转换结果是否为NaN。

isNaN('hello');//true
isNaN('123');//false

isNaN(‘hello’);语句,内部执行Number(‘hello’),结果为NaN,则返回true。
isNaN(‘123’);语句,内部执行Number(‘123’),结果为123,不是NaN,所以返回false。

2. ++/- - 与+/-(一元正负运算)
2.1 ++/- -
var a = '123';
a ++;//124
var b = 'abc';
b ++;//NaN
typeof(b)//number

同样,在进行++运算之前,会先将变量传入Number( ),转换为数值类型再进行++
b的例子说明,经过隐式转换后,即使转换结果为非数字(NaN),变量类型依然为数值类型
a --, ++ a, - - a同理

2.2 +/-
var a = -'123';//-123
typeof(a)//number
var b = -'abc';//NaN
typeof(b)//number

同样,经过隐式转换后,即使转换结果为非数字(NaN),变量类型依然为数值类型

3. +
var a = 'abc' + 1;//'abc1'
typeof(a);//String

当+号两边有一个为字符串时,会调用String(),将两边都转换为字符串类型再进行拼接
通过此特性可知,若在实际开发中需将两个数字字符串的值相加,直接相加会拼接字符串,使用2.2中的到的结论在变量名前加上+号通过隐式转换能快速得到结果

var a = '123';
var b = '456';
console.log(a+b); //'123456'
console.log((+a) + (+b));//579
console.log(typeof(a+b));//string
console.log(typeof((+a) + (+b)));//number
4. -、*、/、%
var a = '1' - 0;//1
typeof(a);//number
var b = 'a' * 1;//NaN
typeof(b);//number

-、*、/、%运算前,先对运算符两侧通过Number()转换为数值类型再进行运算。开篇问题又多出一个解决思路

var a = '123';
var b = '456';
console.log((a - 0) + (b - 0));//579
console.log(typeof((a - 0) + (b - 0)));//number
5. &&、||、!

在与或非时,会使用Bolean()转换为布尔值

6. < > <= >= == !=
var a = 1 > '2';//false
var b = 1 == '1';//true
var c = 1 == true;//true

有数字进行比较时,会将两边都转换为数值类型,再进行比较。
因为 1 == ‘1’会进行隐式类型转换,结果为true。所以在严格比较时使用“===”

var a = 1 === '1';//false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值