数据类型转换
数据类型转换
强制转换
强制转换主要指使用Number
、String
和Boolean
三个构造函数,手动将各种类型的值,转换成数字、字符串或者布尔值。
Number()
原始类型的值主要是字符串、布尔值、undefined和null,它们都能被Number转成数值或NaN。
// 数值:转换后还是原来的值
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
背后的规则:
调用对象自身的
valueOf
方法。如果返回原始类型的值,则直接对该值使用Number
函数,不再进行后续步骤。如果
valueOf
方法返回的还是对象,则改为调用对象自身的toString
方法。如果toString
方法返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。如果
toString
方法返回的是对象,就报错。
var obj = {x: 1};
Number(obj) // NaN
// 等同于
if (typeof obj.valueOf() === 'object') {
Number(obj.toString());
} else {
Number(obj.valueOf());
}
toString()
,它的作用是返回一个反映这个对象的字符串;对于值类型数据(
number
、string
、boolean
、null
和undefined
)使用而言,其效果相当于类型转换,将原类型强转为字符。对于数组Array会以逗号分隔返回。
对于对象,返回
[object objectname]
,其中 objectname 是对象类型的名称。
valueOf()
,将对象转换成原始类型的值(数值、字符串和布尔值等),并返回;
String()
原始类型值的转换规则
数值:转为相应的字符串。
字符串:转换后还是原来的值。
布尔值:true转为"true",false转为"false"。
undefined:转为"undefined"。
null:转为"null"。
String
方法背后的转换规则,与Number
方法基本相同,只是互换了valueOf
方法和toString
方法的执行顺序。
先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。
如果toString方法返回的是对象,再调用原对象的valueOf方法。如果valueOf方法返回原始类型的值,则对该值使用String函数,不再进行以下步骤。
如果valueOf方法返回的是对象,就报错。
String({a: 1})
// "[object Object]"
// 等同于
String({a: 1}.toString())
// "[object Object]"
Boolean()
除了以下六个值的转换结果为false
,其他的值全部为true
。
Boolean(undefined) // false
Boolean(null) // false
Boolean(-0) // false
Boolean(0) // false
Boolean(+0) // false
Boolean(NaN) // false
Boolean('') // false
http://javascript.ruanyifeng.com/grammar/conversion.html https://segmentfault.com/a/1190000008432611
原始值/原始类型值指的是['Null','Undefined','String','Boolean','Number']五种基本数据类型之一
隐式类型转换
隐式类型转换是这样的:预期什么类型的值,就调用该类型的转换函数。比如,某个位置预期为字符串,就调用String函数进行转换。如果该位置即可以是字符串,也可能是数值,那么默认转为数值。
Last updated
Was this helpful?