显示类型转换和隐式类型转换

本文深入解析JavaScript中的类型转换,包括Number(), parseInt(), parseFloat(), String(), Boolean()等函数的使用,以及隐式类型转换的规则。通过实例展示了不同数据类型间的转换过程及结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示类型转换

1.Number():函数把对象的值转换为数字,如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。

        var a = 'true';
        console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaN
        var a = '1a';
        console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaN
        var a = undefined;
        console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaN
        var a = null;
        console.log(typeof(Number(a)) + '-' + Number(a)); // number-0
        var a = '123';
        console.log(typeof(Number(a)) + '-' + Number(a)); //number-123
        var a = true;
        console.log(typeof(Number(a)) + '-' + Number(a)); //number-1

2.parseInt():函数可解析一个字符串,并返回一个整数

        var a = '3.14';
        console.log(typeof(parseInt(a)) + '-' + parseInt(a));//number-3
        var a = true;
        console.log(typeof(parseInt(a)) + '-' + parseInt(a));//number-NaN
        var a = null;//undefined,NaN
        console.log(typeof(parseInt(a)) + '-' + parseInt(a));//number-NaN
        var a='10';
        console.log(parseInt(a,16));//16
        var a='b';
        console.log(parseInt('abc123'));//NAN
        var a='b';
        console.log(parseInt('123abc'));//123 

3.parseFloat():函数可解析一个字符串,并返回一个浮点数

	    var a = 'b';
        console.log(parseFloat('3.1415')); //3.1415
        var num = parseFloat('3.1415')
        console.log(num.toFixed(2));//3.14  四舍五入

4.String():函数把需要转换的值转换为字符串,并返回。

        console.log(typeof(String(123))); //string
        console.log(typeof(123 + '')); //string

5.toString()

        var str = '3.14';
        console.log(str.toString()); //3.14
        var str = undefined; //null也没有toString()
        console.log(str.toString()); //报错
        var str = '100';
        console.log(parseInt(str, 2));//二进制100变十进制  4
        console.log(parseInt(str, 2).toString(16));//4

6.Boolean()

        console.log(Boolean(1));//true
        console.log(Boolean(null));//false  NAN 空字符串 0 undefined null

隐式类型转换

+运算符内部会隐式调用String()

     var a = 'a' + 1; //String(1) 'a'+'1'=a1
     console.log(a) //a1

运算符内部(-,*,/,%)会隐式调用Number()

     var a = '3' * 2; //* / - % str-->Number转换为数字
     console.log(a); //6
     var a = '1' > 2; //转换成Number >=<
     console.log(a); //false
     //转换成ASCII var a='a'>'b';
     var a=1=='1';
     console.log(a);//true
     var a=1==='1';//不进行隐式转换
     var a=NaN==NaN;//false

内部会隐式调用Bollean()

     var a1=2>1>3;
     var a2=2>1==1;
     console.log(a1);//false
     console.log(a2);//true
     var a=undefined>0;//undefined和null既不大于0也不小于0 也不等于0
     var a=null==0;//false
     var a=undefined==null;//true
     var a=undefined===null;//false
     console.log(a)//false

运算符内部(++/–,正负)会隐式调用Number()

     var a = '123';
     a++;
     console.log(a); //124
     var num='123';
     console.log(typeof(+num));//number
     var num='abc';
     console.log(typeof(-num)+':'+-num);//number:NaN

isNaN() 需要经过Number()处理

     console.log(isNaN(NaN));//true
     console.log(isNaN(undefined))//true
     console.log(isNaN(null));//false
     console.log(isNaN('ab'));//true
     console.log(isNaN('null'));//true
     console.log(isNaN(1));//false
经典面试题
1.if(typeof(a) &&(-true) +(+undefined)+ ' '){
   //"undefined" && "NaN "  (-1+NaN+' ')
   console.log('通过了')
  }else{
   console.log('没通过')
  }
   console.log(a);
   //通过了
   //a is not defined

未被定义的变量直接console.log会报引用错误,但是放在typeof里面不会出错。

2.console.log(!!' '+!!''-!!false || '未通过');
//1

或运算符遇到一个条件为真就直接输出运算结果,遇到条件为假的情况就继续判断。
分析:前面的’ ‘中是一个空格,空格是true,在两次!之后还是true,遇到+运算符转换为数字1,后面的’'是一个空字符串,它是false,两次!!后还是false,转换为数字0,由此可知,或运算符前面的计算结果是1,所以结果为1。

3.window.a || (window.a = '1');
  console.log(window.a);
 //'1'

分析:括号的面的优先级是最高的,先看括号里面的内容。

4.var =???
  if(a == 1 && a == 2 && a == 3){
  console.log("1");
  }

分析:与运算符条件条件全部为真才会输出运算结果。上述题中,a需要满足三个条件,此时应该想到复杂数据类型转换。
复杂数据类型转number顺序如下:
1.先使用valueOf()方法获取其原始值,如果原始值不是number类型,则使用 toString()方法转成string
2.再将string转成number运算
对象的valueOf()方法是可以重写的。

var a = {
i : 0,//声明一个属性i
valueOf:function ( ) {
return ++a.i;//每调用一次,让对象a的i属性自增一次并且返回
}
}
if (a == 1 && a == 2 && a == 3){//每一次运算时都会调用一次a的valueOf()方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值