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这门语言很灵活,从而也导致很多坑,另外数字对象等隐式转换也是很奇妙,比如(({})[+[]]+"")[+[]+!+[]]等于什么?
相关文章推荐
- 原生js写的简单心电图
- EXTJS4.0.7开发积累(12)
- EXTJS4.0.7开发积累(11)
- Web开发之-JSP学习总结-第一篇:JSP总结
- EXTJS4.0.7开发积累(10)
- javascript基础1
- JavaScript 数组- Array的方法总结(推荐)
- 如何用JS判断两个数字的大小
- javascript实现滚动效果的数字时钟实例
- Javascript字符串常用方法详解
- ES6新特性:JavaScript中的Reflect对象
- js实现的焦点轮播图
- 【Xml】xml与json
- js实现的对象深拷贝
- js保留小数
- js各类正则表达式(中文、字母、数字、全角)
- JavaScript 函数replace揭秘
- JavaScript 正则表达式上——基本语法
- js数组去重的4个方法及ts数组去重
- HTML文件中引入js文件路径