JS数据类型转换

JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。

1、强制转换
强制转换主要指使用Number、String和Boolean三个构造函数,手动将各种类型的值,转换成数字、字符串或者布尔值。

Number()

Number(1)
1
Number('123')
123
Number('hello world')
NaN
Number(true)
1
Number(false)
0
Number(null)
0
Number(undefined)
NaN
Number([1,2,3])
NaN
Number([3])
3
Number(function(){})
NaN
Number({})
NaN

ECMAScript 提供了两种把非数字的原始值转换成数字的方法,即 parseInt() 和 parseFloat()。

parseInt('123abc')
123
parseInt('abc123')
NaN
parseFloat('abc123.123')
NaN
parseFloat('123.123qwe')
123.123

上面代码中,parseInt逐个解析字符,而Number函数整体转换字符串的类型。Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
Number() 原理如下:

var obj = {
  valueOf: function () {
    return {};
  },
  toString: function () {
    return {};
  }
};

Number(obj)

报错:Cannot convert object to primitive value(…)

var obj = {
  valueOf: function () {
    return [];
  },
  toString: function () {
    return 3;
  }
};

Number(obj)
3
var obj = {
  valueOf: function () {
    return 5;
  },
  toString: function () {
    return 3;
  }
};

Number(obj)
5

比较上面代码结果可看出:Number()方法实际是先调用对象自身的valueOf(),如果返回的结果不是原始类型值,则再调用自身的toString()方法。

String()

String('111')
"111"
String(222)
"222"
String(true)
"true"
String('false')
"false"
String(undefined)
"undefined"
String(null)
"null"
String('')
""
String([])
""
String([1,2,3])
"1,2,3"
String({x:1, y:2})
"[object Object]"
String(function(){})
"function (){}"

String方法背后的转换规则,与Number方法基本相同,只是互换了valueOf方法和toString方法的执行顺序。

Boolean()
使用Boolean函数,可以将任意类型的变量转为布尔值

Boolean(1)
true
Boolean(0)
false
Boolean('')
false
Boolean('123')
true
Boolean(null)
false
Boolean(undefined)
false
Boolean([])
true
Boolean({})
true
Boolean(NaN)
false

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

undefined
null
-0
0或+0
NaN
”(空字符串)

2. 自动转换(隐式转换)

if('abc'){console.log(1)}
1
if(1+'1'){console.log(1+'1')}
11

除了加法运算符有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。注意:null 转为数值时为0,而 undefined 转为数值时为 NaN。

"1"-1
0
"undefined"-1
NaN
null-0
0
null-1
-1
true-1
0
false-0
0
"1"*1
1
"2"/2
1
"2"%1
0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值