浅谈JavaScript中的数据类型转换
前言
在JavaScript中,数据类型转换是一种常见的操作,用于将一种数据类型转换为另一种数据类型。数据类型转换可以分为两大类:显式类型转换和隐式类型转换。
显式类型转换
这是由程序员明确指定的类型转换,通常使用JavaScript内置的类型转换函数或方法完成。
隐式类型转换
这是JavaScript自动执行的类型转换,通常发生在运算符两边的数据类型不匹配时。
正文
原始值转布尔 -- 显示转换 Boolean(value)
我们来看看这三条数据,我们把Number
数值转化成Boolean
,最终的打印结果会是什么呢?
console.log(Boolean(1));
console.log(Boolean(0));
console.log(Boolean(-1));
我们可以看到无论是正数或者负数的打印内容都是true
,只有参数为0
时,打印false
.
我们再来看看字符串
if(''){
console.log('hello');
}else{
console.log('false');
}
空字符时打印出的是false
.
if('a'){
console.log('hello');
}else{
console.log('false');
}
有字符时就会输出'hello',也就是说字符串转布尔值,当字符串为空时,判断为false
,非空判断为true
;
所以对于原始类型转布尔转换成boolean值 0 "" null undefined NaN 会是false
原始值转数字 -- 显示转换 Number(value)
console.log(Number('j'));
console.log(Number(null));
console.log(Number(undefined));
console.log(Number(NaN));
console.log(Number(true));
字符串转Number
如果字符串包含除了数字之外的其他字符,转换通常会失败,结果是NaN
,undefined
,NaN
都会转化成NaN
,将空字符串""
转换为数字,结果是0
。如果字符串仅包含空白字符(如空格、制表符等),结果也将是0
。
原始值转字符串 -- 显示转换 String(value)
所有的原始值类型都有一个 toString()
方法,可以将值转换为字符串。我们也可以使用一元运算符进行转换。
let num = 123;
let strNum = num + '';
console.log(strNum);
let bool = true;
let strBool = bool + '';
console.log(strBool);
原始值转对象 -- 显示转换 new Xxx()
原始数据类型转化成对象,可以通过各自的构造函数进行转换
let num = 123;
let numObj = new Number(num);
console.log(numObj);
let str = 'hello';
let strObj = new String(str);
console.log(strObj);
let bool = true;
let boolObj = new Boolean(bool);
console.log(boolObj);
对象转原始值 -- 通常发生隐式转换
任何对象转布尔都是true
对象转字符串
我们来看看这一串代码
let obj = {
valueOf: function() {
return "valueOf result";
},
toString: function() {
return "toString result";
}
};
console.log(obj + '');
console.log(String(obj));
我们在对象中写好了两个方法一个是valueOf
,一个是toString
,我们打印一下结果
第一个打印的是valueOf result
,第二个是toString result
,为什么会这样呢?
在第一条打印中我们是obj + ''
对象加上了一个空字符串,在JavaScript中,当尝试将一个对象与字符串连接时,该对象会被隐式地转换成字符串。然后先调用valueOf
看看返回的数据是否是一个原始数据类型,如果是,则返回那么这个返回值将被用作字符串连接。
在第二条打印中,当执行 String(obj)
,String
函数调用 ToString
操作。ToString
调用 obj.toString()
,返回 "toString result"
。这就不得不提及抽象操作ToString
(ToString
是一种抽象操作,它将对象转换为字符串。对于对象,它通常会调用对象的 toString
方法。)
对象转数字
在JavaScript中,将对象转换为数字通常需要先将对象转换为字符串,然后再将字符串转换为数字。但是,直接将一个对象转换为数字通常会导致NaN
,因为对象本身没有一个确定的数值表示。
但是我们可以使用一元运算符进行转换
let obj = { number: 123 };
let num = +obj.number;
console.log(num);
感谢大家阅读,若有不足,恳请指出!!!
转载自:https://juejin.cn/post/7392555617200341029