js 数据类型转换

显示类型转换

由开发人员手动调用一些方法将数据强制转换成另一种类型。

Number()方法:将数据转换成Number类型,无法转换的数据会返回NaN。
例子:

//字符串123转换成数字类型的123    
var num = Number('123'); 
// number:123
console.log(typeof(num) + " : " + num); 
//NaN 字符串只有数字字符串才能转换数字类型,其它的字符串不能被转换   
console.log(typeof Number("a")) 
//NaN 字符串里面有别的字符也不能转换
console.log(typeof Number("123abc")) 
//空字符串会转换成0
console.log('');
// 布尔值转换成数字类型true为1,false为0
console.log(typeof Number(true));
// null转换成数字是0 
console.log(typeof Number(null));
// NaN 特殊情况; 
console.log(typeof Number(undefined)); 
//引用类型不能转换成number所以是NaN
console.log(Number(function(){})); 

parseInt()方法:把数据转换成整型,一共两个参数。
它会从左向右读数字位读到非数字位截止,然后返回前面的数字位。
第一个参数:数据.
第二个参数:可选,必须填整数,是以进制数为基底,转换成10进制,取值范围是2-36.
paseInt和Number的侧重点不同,parseInt侧重点在于怎么将一个数字转换成整数,所以 字母 false true null表面上就不是一个数字转换不了会返回NaN,而Number的侧重点在于将数据千方百计的转换为数字,所以false true null使用Numberl可以被转换成数字。

例子:

//16 以16进制数的10为基底转换成10进制数的整数为16
parseInt('10',16); 
//b在16进制里是11转换成10进制是11
parseInt('b',16); 
//NaN 转换不了2进制里没有3 
parseInt('3',2);  
//字符串里面123是数字所以可以转换
console.log(parseInt('123'))
//NaN 从左向右读,第一位就是字母,字母转换不了返回NaN
console.log(parseInt('a234'));
//基底为0还是原封不动返回10进制3,有些浏览器返回NaN
console.log(parseInt(3,0));  
//点是非数字位,所以返回前面123的数字位
parseInt('123.abc'); 
//小数会被转换成整数
console.log(parseInt(123.1)); 

parseFloat():将数转换成浮动数(小数),它会从左向右读数字位,读到除第一个点以外的非数字位截止,然后返回前面的数字位。
例子:

//除第一个点以外的非数字位全部被忽略
var demo = "100.2.2";
var num = parseFloat(demo) //100.2
console.log(typeof(num) + " : " + num); //100.2
console.log(parseFloat('123.2abc')); //123.2

String():把数据转换成字符串,任何数据都可以转换成字符串
例子:

console.log(String(123)); //"123"
console.log(true); //"true"

Boolean():将数据转换成布尔类型,除了undefiend,null,NaN,“”,0,false这6个空值转换为布尔值为false以外,其他值转换为布尔值都为true。
例子:

//false
console.log(Boolean(0));
//true 引用类型也可以转换成布尔值
console.log(Boolean(function(){}));

toString():用法是对象.toString(),把数据转换成字符串,undefined和null没有toString方法,有两个参数。
第一个参数:数据
第二个参数:以10进制位基底转换成目标进制
例子::

var demo = 123;
var num = demo.toString();
console.log(typeo(num) + " : " + num);  //'123'  
demo = 10;
//12 以10进制的10为基底转换为8进制是12
num = demo.toString(8); 

隐式类型转换:

隐式类型转换是js引擎通过调用显示类型的方法进行转换。

isNaN():判断括号内的是不是NaN,返回布尔值。
原理:
它会先把括号里的数据通过Number()转换,在判断是否是NaN。

//true
isNaN('abc');

上面的代码会进行以下的操作:
首先引擎首先调用Number(‘abc’),字母转换不了Number所以返回NaN。
然后在将返回值放到isNaN中,即isNaN(NaN)。
隐式转换的过程是Number,isNaN内部会调用Number()方法,这就是看不见的转换。

++/-- +/-(正负):如果操作数不是数字,则会隐式调用Number()进行数据转换

//引擎调用Number('123') 在进行++ 124
console.log(++'123') 
//Number('abc') NaN
console.log(++ 'abc') 
//数字类型23 
console.log(+'23')

加号+:加号有一个特殊情况,当操作数两边有一边是字符串就调用String进行转换在拼接字符串

//1会调用String()
console.log('a' + 1) 

-(减号)*/%:如果操作数不是数字的话,则内部会隐式调用Number进行转换

//Number('a') = NaN; NaN * 1 = NaN;
var b = 'a' * 1; 

&& || !:如果操作数不是布尔值,则内部隐式调用Boolean()进行转换

/*
先把1转换成布尔值Boolean(1)=true,
先读前面第一个表达式的值转换成布尔值的结果是,true还是false,
如果是true返回第二个表达式的值,如果是false返回第一个表达式的值。
*/
//该表达式返回2
1 && 2;

< > =< >=(比较运算符): 如果操作数都是字符串,则比较ascii码,如果有一个操作数是除字符串以外的类型则调用Number转换成数字在比较。

//字符串和字符串比比的是字符串开头字符的ascll码的顺序
//如果相等,在去比第二位字符,如果不等返回结果
//以此类推 
console.log("22" > "24"); 
//上面'2' === '2' 所以比较第二位字符'2'>'4'
//'2'的ascii比'4'的ascii码小,所以返回false

//有数字比较会隐式调用number
//布尔值和布尔值比较也会隐式调用number
//true 字符串和数字比字符串会,先调用Number()转换成数字在和数字比
console.log('3'>2); 
//Number('a')=NaN NaN > 2=false;NaN和任何数比都是false 
console.log('a'>2);

!= ==

//布尔值和数字比,布尔值会先调用Number转换成数字在和数字比较
console.log(1 == true); 
//字符串和数字比,字符串会先调用Number转换成数字在和数字比较
console.log(1 == '1'); 
//转换成数字在进行比较
console.log(true == false) 
//从左往右比 先1 > 2返回true; 在true > 3 转换成数字1 > 3 返回false
console.log(1 > 2 > 3); 

特殊情况:
undefined 跟null和任何数据比都是false
因为undefined和null用上> < =(比较运算符),它不会发生类型转换
但是特殊的是 undefined和null比是true
NaN==NaN 为false NaN不等于任何东西 非数和任何数据比都是false

=== !==全等和不全等:
该运算符不会发生类型转换,不光数据相等,数据类型也要统一

//true
1 === 1  
//false不发生类型转换,数据类型也要统一
1 === '1' 

变量未经定义使用会报错,但有一种情况不会报错,就是放到typeof里面

//报错
console.log(a); 
//不报错 返回"undefined"
console.log(typeof(a)) 
//"string" typeof返回的是字符串类型的值
console.log(typeof(typeof(a)));

toFixed(参数):四舍五入保留几位小数

//四舍五入保留三位小数123.457
console.log(123.456789.toFixed(3));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值