美文网首页
JS数据类型转换

JS数据类型转换

作者: sxfshdf | 来源:发表于2018-09-23 14:52 被阅读0次

1. 转字符串

1.1 String(x)

String函数可以将任意类型的值转化成字符串。

  • 数值:转化为相应的字符串。
String(1) // "1"
  • 字符串:转化后还是原来的值。
  • 布尔值:true转化为字符串true,false转化为false
String(ture) // "true"
  • undefined:转化为字符串undefined
String(undefined) // "undefined"
  • null:转化为字符串null
String(null) // "null"
  • 对象: 如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
1.2 x.toSring()
  • 数值:转化为相应的字符串。
(1).toString() // "1"
  • 字符串:转化后还是原来的值。
  • 布尔值:true转化为字符串true,false转化为false
true.toString() // "true"
  • undefined:报错。
undefined.toString() // "Cannot read property 'toString' of undefined"
  • null:报错。
null.toString() // "Cannot read property 'toString' of undefined"
  • 对象: 如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
1.3 x + ''(常用)
  • 数值:转化为相应的字符串。
1 + ''  // "1"
  • 字符串:转化后还是原来的值。
  • 布尔值:true转化为字符串true,false转化为false
true + '' // "true"
  • undefined:转化为字符串undefined
undefined + '' // "undefined"
  • null:转化为字符串null
null + '' // "null"
  • 对象: 如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。
var a = { a:1}
a + ''// "[object Object]"
[1, 2, 3] + ''// "1,2,3"

2. 转布尔

2.1 Bollean(x)
2.2 !!x

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

  • undefined
  • null
  • 0
  • NaN
  • ''(空字符串)

3. 转数值

3.1 Number(x)

原始类型值

// 数值:转换后还是原来的值
Number(324) // 324

// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324

// 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN

// 空字符串转为0
Number('') // 0

// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0

// undefined:转成 NaN
Number(undefined) // NaN

// null:转成0
Number(null) // 0

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

Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
3.2 parseInt(x, 10)

第一个数值表示被解析的值,第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制。

parseInt('17', 8) // 15
parseInt('1111', 2) // 15

Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
parseInt逐个解析字符,而Number函数整体转换字符串的类型。
另外,parseInt和Number函数都会自动过滤一个字符串前导和后缀的空格。

parseInt('42 cats') // 42
Number('42 cats') // NaN
parseInt('\t\v\r12.34\n') // 12
Number('\t\v\r12.34\n') // 12.34
3.3 parseFloat(x)

用于将一个字符串转为浮点数。

parseFloat('3.14') // 3.14

如果字符串符合科学计数法,则会进行相应的转换。

parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14

如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。

parseFloat('3.14more non-digit characters') // 3.14

parseFloat方法会自动过滤字符串前导的空格。

parseFloat('\t\v\r12.34\n ') // 12.34

如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN。
注意paseFloat会将空字符串转为NaN。

parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN
3.4 x - 0 (常用)
'1' - 0 // 1
'1.23' - 0 // 1.23
3.5 + x
+ '1'  // 1
+ '1.23'  // 1.23

4. 自动转换

自动转换,它是以强制转换为基础的。
遇到以下三种情况时,JavaScript 会自动转换数据类型,即转换是自动完成的,用户不可见。

  • 不同类型的数据互相运算。
123 + 'abc' // "123abc"
  • 对非布尔值类型的数据求布尔值。
if ('abc') {
  console.log('hello')
}  // "hello"
  • 对非数值类型的值使用一元运算符(即+和-)。
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN

自动转换的规则
预期什么类型的值,就调用该类型的转换函数。比如,某个位置预期为字符串,就调用String函数进行转换。如果该位置即可以是字符串,也可能是数值,那么默认转为数值。
由于自动转换具有不确定性,而且不易除错,建议在预期为布尔值、数值、字符串的地方,全部使用Boolean、Number和String函数进行显式转换。

4.1 自动转化为布尔值

JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。
因此除了以下五个值,其他都是自动转为true。

  • undefined
  • null
  • 0
  • NaN
  • ''(空字符串)
    下面这个例子中,条件部分的每个值都相当于false,使用否定运算符后,就变成了true。
if ( !undefined
  && !null
  && !0
  && !NaN
  && !''
) {
  console.log('true');
} // true

下面两种写法,有时也用于将一个表达式转为布尔值。它们内部调用的也是Boolean函数。

// 写法一
expression ? true : false
// 写法二
!! expression
4.2 自动转化为字符串

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"

这种自动转换很容易出错。

var obj = {
 width: '100'
};

obj.width + 20 // "10020"

上面代码中,开发者可能期望返回120,但是由于自动转换,实际上返回了一个字符10020。

4.3自动转化为数值

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。
一元运算符也会把运算子转成数值。

+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0

相关文章

  • 2、强制数据类型转换

    数据类型转换: 在js中,数据类型的转换有两种,分别是自动转换和强制转换 自动转换: 自动转换是用JS进行某些操作...

  • JS里的数据类型转换

    在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。 1, 显式数据类型转换 a:转数字: 1)Numb...

  • javaScript中数据类型转换方法

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • 数据类型转换

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • JavaScript的显式转换和隐式转换

    js的显式转换和隐式转换都是数据类型的转换;js的数据类型是弱类型的,即可以给变量赋值为任意的数据类型,当进行运算...

  • JS隐式数据类型转换

    隐式数据类型转换介绍 前面有总结过 JS数据类型转换 Number(), toString(), parseInt...

  • JS的基本小结

    JS基本输出方式 JS数据类型 变量 常量 变量常量小练习 声明提前 隐式转换 显示转换/强制转换

  • JavaScript学习笔记.md

    学习材料————廖雪峰js教程 数据类型 ===与== == 自动转换数据类型再比较;=== 不转换类型 (更好...

  • JavaScript基础总结

    ✍目录总览:(JS概念与组成、JS格式规范、JS基本语法【输入、输出、变量、数据类型、数据类型转换、运算符、流程控...

  • JS里的数据类型转换

    上一篇文章(JS里的数据类型)介绍了js中的数据类型。这篇主要介绍数据类型转换。 一、任意类型转字符串 转换成st...

网友评论

      本文标题:JS数据类型转换

      本文链接:https://www.haomeiwen.com/subject/nsgfoftx.html