您的位置:首页 > Web前端 > JavaScript

js的隐式转换问题

2016-07-21 02:31 435 查看
在项目中遇到一个""==0等于true的问题。从而引起对js隐式转换的研究,对于js的运算符两边的变量进行运算时,一般都是把字符串转换成数字类型,比如'2'-1=1,'2'*1=2等等,而为数不多的例外是+运算符,因为加运算符在js中不仅可以作为数字运算,还可以作为字符串运算,而js在转换的时候,把转换为字符串运算作为更高的优先级,比如'2'+1='21'而不是3,而对于""==0这个问题,通过0+“”我们可以知道,0转换成字符串的时候是等于'0'的,所以""==0应该返回false,与一开始的结果不符合,而通过+""返回的值是0可以知道,""转换成数字是等于0的,所以可以知道==运算符比较数字和字符串的时候是把字符串转成数字进行比较的,当然这种比较在12=='12'的比较中我们是不需要在意的,反正不管怎么转换他们都是相等的,但是在形如'0x12'==18这种比较中就不一样了,这个结果返回true,由此可见是0x12转成了18,但是在'012'==10这个比较中却返回了false,由此可见,‘012’转换成数字时是12而不是10(0开头是8进制),所以我觉得js引擎应该用parestInt进行转换的,因为这个解析结果和这个函数一致parseInt('0x12')=18,parseInt('012',8)=10,parseInt('012')=12.js这门语言很灵活,从而也导致很多坑,另外数字对象等隐式转换也是很奇妙,比如(({})[+[]]+"")[+[]+!+[]]等于什么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: