JS中的各种类型转换规则(转)

JS中的类型转换非常恶心,大家都懂的,不过该学还是要学。

今天看犀牛书看到了转换规则,总结出来。

X转字符串、数字、布尔值

X表示各种类型的值,直接上图:

转数字 转字符串 转布尔值
undefined NaN “undefined” false
null 0 “null” false
true 1 “true”  
false 0 “false”  
0   “0” false
-0   “0” false
NaN   “NaN” false
Infinity   “Infinity” true
-Infinity   ”-Infinity” true
1(非零)   “1” true
{}(任意对象) 见下文 见下文 true
[](任意数组) 0 ”” true
[9](包含一个数字元素) 9 “9” true
[”a”](其他数组) NaN 使用.join()方法 true
function(){}(任意函数) NaN 见下文 true

两个基本方法

上文中有三个“见下文”,就是见这里了。这三个地方也就是JS转换最麻烦的地方。

首先来看两个基本的转换方法:

toString()  // 返回对象的字符串表示形式

valueOf()  // 返回对象的数字表示形式

乍一看很简单是吧,别着急,关键是JS并不会像你想的那样单纯地调用这些方法。文章地址https://www.yii666.com/article/756341.html网址:yii666.com<

对象转字符串

具体步骤如下:

  • 如果有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成字符串并返回。字面量转字符串见上表。
  • 如果没有toString()方法或者没有返回字面量,并且有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成字符串返回。
  • 如果以上两步都没有成功,就抛出一个类型错误异常。

对象转数字

其实就是把对象转字符串的前两步调换了一下,然后把返回结果都转换成数字。

具体步骤如下:

  • 如果有valueOf()方法,调用valueOf()方法。如果这个方法返回字面量就转换成数字返回。
  • 如果没有valueOf()方法或者没有返回字面量,并且有toString()方法,调用对象的toString()方法,如果返回一个字面量就把这个字面量转换成数字并返回。字面量转数字见上表。
  • 如果以上两步都没有成功,就抛出一个类型错误异常。

对象转字面量

有些特殊的运算符并不会把对象转换成数字或者字符串,而是转换成字面量。

对象转字面量的具体步骤和对象转数字的具体步骤一样,先调用valueOf再调用toString,区别是,对象转字面量并不会在返回之前把结果转换成字符串或者数字,也就是说没有上面步骤中的粗体部分。文章来源地址:https://www.yii666.com/article/756341.html

那么什么运算符会这么SB呢:

  • +
  • ==
  • !=
  • <,>以及所有关系运算符

处理日期类

别着急,JS还有更SB的一种情况,就是处理Date类型。

如果“+”和“==”遇到的是Date类型对象,那就会采用去除粗体部分的对象转字符串步骤,也就是说先调用toString再调用valueOf,并且不会对结果进行类型转换。网址:yii666.com

总结

普通转换参见表格,+、==、!=、<>和关系运算符的文艺转换参见对象转字面量,+、==遇见Date的2B转换参见处理日期类。文章来源地址https://www.yii666.com/article/756341.html

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png