0
点赞
收藏
分享

微信扫一扫

数据类型转换中几个容易让人弄错的点!

parseInt​方法用于将字符串转为整数,如果​​parseInt​​的参数不是字符串,则会先转为字符串再转换。

parseInt(1.23) // 1 //

等同于 parseInt('1.23') // 1;

如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回​​NaN;​

ParseFloat:同上

 

尤其值得注意:​​parseFloat​​​会将空字符串转为​​NaN​​。

 

这些特点使得​​parseFloat​​​的转换结果不同于​​Number​​函数。

例:parseFloat(true) // NaN

Number(true) // 1

parseFloat(null) // NaN

Number(null) // 0

parseFloat('') // NaN

Number('') // 0

parseFloat('123.45#') // 123.45

Number('123.45#') // NaN

指数赋值:

var x = 2;

var y = 3;

x **= y;

console.log(x); // 8

// 相当于 x = x ** y

 

强制类型转换:​​Number()​​​、​​String()​​​和​​Boolean()​

Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组。

Number({a: 1}) // NaN

Number([1, 2, 3]) // NaN

Number([5]) // 5

String​方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。

String({a: 1}) // "[object Object]"

String([1, 2, 3]) // "1,2,3"

 

Boolean()

它的转换规则相对简单:除了以下五个值的转换结果为​​false​​​,其他的值全部为​​true​​。

​undefined​

​null​

​0​​​(包含​​-0​​​和​​+0​​)

​NaN​

​''​​(空字符串)

 

隐式类型转换

+

第一种情况,不同类型的数据互相运算。

123 + 'abc' // "123abc"

第二种情况,对非布尔值类型的数据求布尔值。

if ('abc') {
console.log('hello')
}

第三种情况,对非数值类型的值使用一元运算符(即​​+​​​和​​-​​)。

var a = "10";
console.log(+ a,typeof +a); // 10 "number"
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN
自动转换的规则是这样的:预期什么类型的值,就调用该类型的转换函数。比如,某个位置预期为字符串,就调用String函数进行转换。如果该位置即可以是字符串,也可能是数值,那么默认转为数值。

自动转换为布尔值

​if​​​语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用​​Boolean​​函数。

因此除了以下五个值,其他都是自动转为​​true​​。

  • ​undefined​
  • ​null​
  • ​+0​​​或​​-0​
  • ​NaN​
  • ​''​​(空字符串)

自动转换为字符串:

 

JavaScript 遇到预期为字符串的地方,就会将非字符串的值自动转为字符串。具体规则是,先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。

 

字符串的自动转换,主要发生在字符串的加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。

 

'5' + 1 // '51'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + [] // "5"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"

自动转换为数值

JavaScript 遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用​​Number​​函数。

除了加法运算符(​​+​​)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。

'5' - '2' // 3
'5' * '2' // 10
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
null + 1 // 1
undefined + 1 // NaN
注意:null转为数值时为0,而undefined转为数值时为NaN。

 

长风破浪会有时,直挂云帆济沧海



举报

相关推荐

0 条评论