js中的显式转换和隐式转换

JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据

显式转换

通过String(),Number(),Boolean(),parseInt(),parseFloat()函数强制转换

var str=123;
var str1='123';
console.log(typeof str);//number
console.log(typeof str1);//string
console.log(typeof String(str));//string
console.log(typeof Number(str1));//number

toString()

数值、布尔值、对象和字符串值(没错,每个字符串也都有一个toString()方法,该方法返回字
符串的一个副本)都有toString()方法。但null 和undefined 值没有这个方法。
多数情况下,调用toString()方法不必传递参数。但是,在调用数值的toString()方法时,可
以传递一个参数:输出数值的基数。默认情况下,toString()方法以十进制格式返回数值的字符串表
示。而通过传递基数,toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格
式表示的字符串值。

var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"

要把某个值转换为字符串,可以使用加号操作符把它与一个字符串("")加在一起。

parseInt()

使用parseInt()进行转换时可以为这个函数提供第二个参数:
转换时使用的基数(即多少进制)。如果知道要解析的值是十六进制格式的字符串,那么指定基数16 作为第二个参数,可以保证得到正确的结果。
```javascript
  var num = parseInt("0xAF", 16); //175

隐式转换

四则运算

当加号运算符时,String和其他类型时,其他类型都会转为 String;其他情况,都转化为Number类型。
其他计算方式都会先将数据转为number在进行计算,如果数据不是纯数字就会转成NaN。
undefined 转化为Number是 为'NaN', 任何Number与NaN的计算结果都为NaN。
NaN 不与 任何值相等 包括自身。

console.log(10+'20') //2010
console.log(10-'20')//-10 number
console.log(10-'one') //NaN not a number
console.log(10-'101a') //NaN
console.log(10*'20') //200 number
console.log('10'*'20') //200 number
console.log(20/'10') //2 number
console.log('20'/'10') //2 number
console.log('20'/'one') //NaN

双等(==)

数据比较时会先将数据转为number在进行比较

console.log(undefined==null) //true
console.log('0'==0) //true 字符串转number
console.log(0==false) //true 布尔转number
console.log('0'==false) //true 2个都转成number
console.log(null==false) //false
console.log(undefined==false)//false

null与undefined相等,与除了自身的其他类型的值比较时,结果都为false