JS的显式和隐式类型转换

85 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情

一、显式类型转换

1、强转为Number

var number = Number("1"); // number 1 
var number = Number(true);// number 1 
var number = Number(false); // number 0 
var number = Number(null); // number 0 
var number = Number(undefined); // number NaN 

//非数字字符串转换时 为NaN 
var number = Number("a");// number NaN 

//只要包含字符都不行 
var number = Number("123a"); // number NaN 

//如果字符串是个小数,也会保留小数位 
var number = Number("123.123"); //number为 123.123

2、数字 转换为 整数 Number

var number = parseInt("123"); // number 123 
var number = parseInt(123);// number 123 
var number = parseInt(123.555);// number 123 
var number = parseInt("123.5555");// number 123 

// parseInt()只能转换数字或者包含数字的字符串,其他值进行转换都是NaN 
parseInt("100px");//100 
parseInt("px100");//NaN 数字只能在前面,如果第一位不是数字,直接不看后面的了

parseInt()可以指定转换的进制

parseInt(10,16);//按照16进制对10转换为10进制 得到:16 
parseInt("a",16);//按照16进制对"a"转换为10进制 得到:11

3、转换为 Float 数值

parseFloat("123.56");//123.56 
parseFloat("123.56abc");//123.56 //不能进行进制转换

4、转换为字符串

  • String() :可以转换任何类型
var str = String(123);//"123" 
var str = String(true); // "true" 
var str = String(null); // "null"
var str = String(undefined); //"undefined"
  • toString():除undefined和null外的类型
//toString()是一个函数,不能转换undefined和null 
var a = 123; 
var str = a.toString(); 

注意:不能直接 123.toString(); 这样系统会认为是个 . 是小数,而不是当做调用方法

toString()可以进行进制转换

var str = a.toString(16); //转换为16进制

parseInt() 和 toString() 都能进行进制转换,但他们是有一个相反的过程的

parseInt("a",16);

parseInt()的最终结果都是 十进制 数字,参数 16 表示转换的值当前是16进制的

parseInt("1010101",2); //把二进制转换为十进制

toString()方法是把 十进制 转为其他进制,刚好和parseInt()相反。

var a = 123;
var str = a.toString(16); 
str = a.toString(2); //把123转换为二进制。

5、转换为Boolean类型

var bool = Boolean(0); //在判断语句中会强转为Boolean类型。 

if(bool){ //false }

二、隐式类型转换

1、判断是否为NaN

isNaN("123")//false 
isNaN("abc")//true

isNaN函数的处理逻辑是:把值通过 Number()进行强转后,再与NaN比较,所以Number()转换后为NaN的值都会得到true

2、++ / --

同理,++或--运算中,会把值强制转换为数字 Number(),正负符号都会把值转为数字:符合Number()转换规则

var number = "123"; 
number ++; // 124 

var number = "abc"; 
number ++;// NaN 

var a = +"abc"; //NaN 
var a = -"123abc"; //-123

3、 + - * / %

基础的数学运算符都符合Number()转换规则,需要注意的是这里并不是用来两个数运算,而是类似前缀一样的用法。

+"123" // 123
-"1" // -1

4、隐式转为boolean类型

除了下面列到的值,用在判断语句时,会转为Boolean类型中的false外,其他都为true

undefined // false
0 // false
NaN // false
'' // false
null // false

三、隐式类型转换的坏处

1 == "1"; //true

消除这种效果,全等于

1 === "1";//false

判断数值和类型都一致才为true。

注意:

null == undefined //true