类型转换
JS 中有六种简单数据类型:
undefined
、null
、boolean
、string
、number
、symbol
,以及一种复杂类型:object
同类型可以运算的, 不同类型之间(转换之后)能运算的
JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。
let y = true;
let x = y ? 1 : "小甘宝贝";
console.log(x);
//变量x到底是数值还是字符串,取决于另一个变量y的值
//y为true时,x是一个数值 y为false时,x是一个字符串
//x的类型没法在编译阶段就知道 必须等到运行时才能知道
虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的。
如果运算符发现,运算子的类型与预期不符就,会自动转换类型。
比如,减法运算符预期左右两侧的运算子应该是数值,如果不是,就会自动将它们转为数值。
console.log("10" - "4");//6
//上面代码中,虽然是两个字符串相减,但是依然会得到结果数值1,
//原因就在于 JavaScript 将运算子自动转为了数值。
显式类型转换
强制转换主要指使用
Number()
、String()
和Boolean()
三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值。toString()
String()
Number()
parseInt(string)
parseFloat(string)
Boolean()
有3个函数可以把非数值转换为数值:
Number()
parseInt()
parseFloat()
parseInt()和parseFloat()
专门用于把字符串转换成数值。
parseInt()
parseInt
方法用于将字符串转为整数。
console.log(parseInt('666')); //666
如果parseInt
的参数不是字符串,则会先转为字符串再转换。
console.log(parseInt(3.14)); //3
// 等同于
console.log(parseInt("3.14")); // 3
parseInt()具有以下特性:
(1)只保留字符串最开头的数字,如果遇到不能转为数字的字符就不再进行下去,返回已经转好的部分
console.log(parseInt("2020在公众号上写了6篇文章")); //打印结果:2017
console.log(parseInt("2020.01在公众号上写了6篇文章")); //打印结果仍是:2017 (说明只会取整数)
console.log(parseInt("aaa2017.01在公众号上写了6篇文章")); //打印结果:NaN (因为不是以数字开头)
//如果字符串头部有空格,空格会被自动去除。忽略开始的空格
console.log(parseInt(' 666')); //666
console.log(parseInt('8a')); // 8
console.log(parseInt('12**')); // 12
console.log(parseInt('12.34')); // 12
console.log(parseInt('15e2')); // 15
console.log(parseInt('25px')); //25
(2)如果对非 String使用 parseInt()或 parseFloat(),它会先将其转换为 String 然后再操作。【重要】
let a = 168.23;
console.log(parseInt(a)); //打印结果:168 (因为是先将 a 转为字符串"168.23",然后然后再操作)
let b = true;
console.log(parseInt(b)); //打印结果:NaN (因为是先将 b 转为字符串"true",然后然后再操作)
let c = null;
c