Javascript数据类型转换

1,052 阅读3分钟

显式转换

其他数据类型转换成Number

  • 将其他数据类型的值转化为数值时,有几种方法?
    • Number()
    • parseInt()
    • parseFloat()
    • +/- (一元操作符)
  • 说一说上面方法的异同?
    它们都是可以将非数值转化为数值,不同点如下:
1. Number() 可以处理BooleannullundefinedObjectparseInt不可以
2. 在处理字符串时
    - number能处理数字字符串(正负),包括十六进制的数字以及空字符串;
    - parseInt是从第一个非空格字符开始解析,直到遇到一个非数字字符串,如果第一个不是数字或者负号,parseInt就会返回NaN
3. parseFloat()与parseInt()类似,+/-与Number()类似
  • 规则?
    除以下情况外能正常转化为数字,其余全为NaN
1. Boolean值, true--->1  false--->0
2. null--->0
3. 空字符串('')---> 0
4. 数字字符串('123', '1.23', '0xf')---> 123, 1.23, 15
5. 对象则是先调用valueOf方法,看该方法的返回值是否能转化成数字,如果不行则基于这个返回值调用toString方法,再测试改返回值能不能转化成数字
    var a = {
        valueOf: function() {
            return 'xyxy';
        },
        toString: function() {
            return 1;
        }
    };
    
    Number(a)  // NaN

其他数据类型转换成String

  • 将其他数据类型的值转化为字符串时,有几种方法?
    • 其他数据类型的值.toString()
    • String(其它数据类型的值)
  • 说一说上面方法的异同?
nullundefined上没有toString()方法
  • 规则?
    字符串拼接时,加号两边如果出现字符串或者引用类型的值({}、[]、function(){}),都会变成字符串拼接(因为原本应该是把引用类型的值转为数字,但是需要先转为字符串,遇到字符串就直接变成字符串拼接了)
{} => "[object Object]"  
function(){}  =>"function(){}"
{}+0; //0 没有变成字符串拼接的原因:把{}当做块处理了,不参与数学运算
({}+0); //"[object Object]0" 用括号运算符包起来就是数学运算了   
// 做个题目吧

let result =10 + false +undefined+[]+'Tencent'+null+true+{};
//(10+0+NaN)+''+'Tencent' +'null' +'true' + '[object Object]'
//"NaNTencentnulltrue[object Object]" 
console.log(result)

其他数据类型转换成Boolean

  • 将其他数据类型的值转化为布尔值时,有几种方法?
    • ! 转换为布尔类型后取反
    • !! 转换为布尔类型
    • Boolean
  • 规则?
只有 0NaN、空字符串、undefinednull 五个值会变为false,其余都是true

隐式转换

isNaN、Math方法

参考显式转换成Number的规则

+ 操作

两边的数据有一个是字符串类型则选用字符串拼接操作,
之后才是考虑数学计算的加操作

==

  1. 「类型一样的几个特殊点」
{} == {} : false  说明:对象(引用类型的值)比较的是堆内存的地址
[] == [] : false 同上
NaN == NaN : false

2.「类型不一样的转换规则」

1. null == undefined : true
2. nullundefined和其他任何值都不相等即 在比较相等性之前,不能将nullundefined转换成其他任何职
3. 字符串 == 对象 要把对象转换为字符串
4. 剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较
5.注意点:
虽然Number(null)的结果是0,但是null0 ==比较时并不是转为数字比较的,即验证3中所说