显式类型转换
数字类型转换
将其他类型转换为数字类型
Number()
注意两点:
- 将
引用类型
转换为数字类型,会先默认调用toString
方法将其转换为字符串,然后再将字符串转化为数字 - 对于非有效的字符串会转换为
NaN
- undefined会转换为NaN
转换类型 | 转换值 | 转换结果 | number | 10 | 10 | null | null | 0 | string | '' | 0 | boolean | true | 1 | boolean | false | 0 | array | [] | 0 | array | [1,2] | NaN | 非有效string | '123abc' | NaN | undefined | undefined | NaN |
---|
你可会疑惑对于不同类型的toString方法到底会返回什么?
请见我的另一篇文章toString方法的调用
parseInt()/parseFloat
- 对于String类型而言,它会从左到右依次查找有效的数字字符,直到遇到非有效的字符就停止,并返回有效的数字
- 对于非String类型而言,先要将其转化为String类型再进行检索
- 若最终都为无效,则返回NaN
let str = '12.3abc';
let str1 = 'abc123';
parseInt(str);//12
parseFloat(str);//12.3
parseInt(true);//NaN
parseInt(str);//NaN
注意
NaN是number类型
字符串类型换
将其他类型转换为字符串类型
String()
默认调用toString方法 具体类型toString方法调用的不同返回值查看之前那篇文章
String(123);//"123"
String(true)//"true"
String(null)//报错
String(undefined)//报错
String([1,2,3])//"1,2,3"
String({})//"[object Object]"
布尔类型转换
Boolean()
将其他类型转换为布尔类型
- 除了
'',undefined,NaN,null,false,0
转化为布尔类型为false之外,其余类型值转换都为true
Boolean('') ;//false
Boolean(undefined) ;//false
Boolean(null) ;//false
Boolean(NaN) ;//false
Boolean(false) ;//false
Boolean(0) ;//false
Boolean({});//true
隐式类型转换
隐式类型转换是经常搞错的问题,接下来我们看看它有多坑
+运算符
一旦+
运算符出现,就一定要清醒一点,因为很可能就掉坑里了
它有两个作用
字符串连接符+
运算对象超过一个,只要其中含有一个非(number,undefined、null、boolean)
的值,都会先转换成字符类型,然后进行的字符串拼接
var a = 123;
var b = '567'
console.log(a+b);//123567
算术运算符+
运算对象中只有(number、undefined、null、boolean)时,它就是算术运算符
var a = '123';
var b = 124;
var c = 'abc';
a++;//123
a>b;//false
+c;//NaN
console.log(1+true);//2
console.log(1+false);//1
console.log(1+null);//1
console.log(1+undefined);//NaN
关系运算符>
当出现大于小于比较符号时,两种情况 1.只有一边是字符串 这时会将字符串类型使用Number()转换为数字类型然后比较
console.log("2">1);//true
- 两边都是字符串时
这时的比较是,按照字符串的unicode编码来转成数字
进行比较的
console.log("2">"10");//true
//"2"的unicode编码为50 "10"的为49
//默认返回的是第一个字符的unicode编码
关系运算符==
undefined/null
console.log(undefined == null);//true
console.log(undefined == undefined);//true
console.log(null == null);//true
console.log(undefined == false);//false
console.log(null == false);//false
注意:
NaN和任何数据比较都不相等,包括它自己
复杂数据类型
复杂数据类型进行隐式转换时,会先转换成String,再转成Number运算 一般顺序如下:
- 先使用valueOf()方法获取其原始值,如果不是number类型,就会使用toString()方法转成string
- 再将string转成number
console.log([1,2] == "1,2");//true
看一道经典的题目
var a =?
if(a==1 && a==2 && a==3){
console.log(1)
}
//a等于什么时,能够打印1
首先a肯定不是一个基本类型的值,否则它就不会等于1又等于2又等于3.
可以利用valueOf方法实现a的改变
var a = {
i: 0,
valueOf: function(){
return ++a.i;
}
}
if(a==1 && a==2 && a==3){
console.log(1)
}
逻辑非!
- 它会将其他数据使用Boolean()转成布尔类型,然后再进行逻辑运算
console.log(!{})//false
Boolean({})=>true 然后!true=> fasle
- 逻辑非的优先级是高于运算符的
console.log(!{} == {})//false
console.log(![] == [])//true
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!