js之类型转换

一.显式类型转换

1.Number(mix)-----把其他类型的数据转换成数字类型的数据

//string类型-
var num= Number('123');
console.log(typeof(num)+':'+num); // number:123
var num= Number('-123');
console.log(typeof(num)+':'+num); // number:-123
var num = Number('abc');
console.log(typeof(num)+':'+num); // number:NaN
var num = Number('123abc');
console.log(typeof(num)+':'+num); // number:NaN
//boolean类型
num = Number(true);//false为0
console.log(typeof(num)+':'+num); // number:1
//undefined类型
num = Number(undefined)
console.log(typeof(num)+':'+num); // number:NaN
//对象
num = Number(null);
console.log(typeof(num)+':'+num); // number:0
num =  Number([]);;//空数组
console.log(typeof(num)+':'+num); // number:0
num=Number({});//空对象
console.log(typeof(num)+':'+num); // number:NaN
num = Number([1,2]);//非空数组
console.log(typeof(num)+':'+num); // number:NaN
//注:如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。
var num = Number(new Date());
console.log(typeof(num)+':'+num); // number:...

 2.parseInt(string,radix)---将字符串转换成整型类型数字(不四舍五入)(截断数字)

当参数string里面既包括数字字符串又包括其他字符串的时候,它会将看到其他字符串就停止了,不会继续转换后面的数字型字符串了。

parseInt('123abc345') // 123
parseInt('abc123') // NaN
parseInt('123') // 123
parseInt('abc') // NaN
//非字符串(非数字)转换为NaN
parseInt(true) // NaN parseInt(null);//NaN parseInt(undefined)//NaN parseInt([]);//NaN parseInt({});//NaN

radix基底是可以选择的参数,radix的范围是(2-36);

但radix为空时,就是将第一个参数转换为数字;

当radix不为空时,这个函数可以用来当做进制转换,第二个参数的作用是将第一个参数的转换为数字后并当成几进制的数字转换为十进制,第二个参数

var num = '13';
console.log(parseInt(num,16));//19,将十六进制的13转换为10进制的数字 
var num = '13fg';
console.log(parseInt(num,16));//319,将十六进制的13f转换为10进制的数字 
var num = '3';
console.log(parseInt(num,2));//NaN;将2进制的3转换为10进制的数字 

注:var num = 123.2353;console.log(num.toFixed(2));//123.24---保留两位小数,四舍五入

3.parseFloat(mix)---这个方法和parseInt方法类似,是将字符串转换成浮点类型的数字;

同样是碰到第一个非数字型字符停止,但是由于浮点型数据有小数点,所以它会识别第一个小数点以及后面的数字,但是第二个小数点就无法识别了

parseFloat('123.2.3') // 123.2
parseFloat('123.2abc') // 123.2
parseFloat('123.abc') // 123
parseFloat('123.234aa')//123.234'

 4.toString(radix);这个方法和前面的都一点不同,它是对象上的方法,任何数据类型都可以使用,转换成字符串类型。

同样radix基底是可选参数,当为空的时候,仅仅代表将数据转化成字符串。

var demo = 100;
typeof demo.toString(); // string 100 把100转换为数字串
//注意,不可以写成100.toString(); .会被当成浮点数而导致报错
typeof true.toString() // string true
//undefiend和null没有toString方法
var demo = undefined;//null也报错
var num = demo.toString();
console.log(typeof(num)+':'+num);//报错
//数组
var arr=[1,2,3];
arr.toString();//"1,2,3";
var arr = [];
arr.toString();//"";
//对象
var obj = {};
obj.toString();//"[object Object]"
var obj = {name:'wang'};
obj.toString();//"[object Object]"
//扩展---判断数据是数组还是对象的有效方法
var demo = {name:'wang'};//---[object Object]
//var demo = [1,2,3,4,5];---[object Array]
console.log(Object.prototype.toString.call(demo));

 radix不为空;表示以十进制为基底,转换为radix目标进制的数字型字符串

var demo = 10;
demo.toString(16) // A
问题:如何将一个二进制的数转换为16进制
//先从二进制转换到10进制,在转换到16进制
var num = 10101010;
var test = parseInt(num,2);//将num当成二进制转换为10进制
var tar = test.toString(16);//将十进制的test转换为16进制
console.log(tar);//aa

5.String(mix)---把任何类型转换成字符串类型。

var demo = 100.23;
console.log(String(demo));//string类型的 100.23
var demo = true;
console.log(String(demo));//string类型的 true
var demo = undefined;
console.log(String(demo));//string类型的 undefined
var demo = null;
console.log(String(demo));//string类型的 null
var demo = [];
console.log(String(demo));//空字符串
var demo ={};
console.log(String(demo));//string类型的 [object Object]

 6.Boolean---转换为布尔值false或者true

0,undefined,null,''(空串),NaN---转换为false,其他为true

Boolean(0); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(''); // false
Boolean(NaN); // false
var demo;
console.log(Boolean(demo));//false
Boolean({})//true
Boolean([])//true

 二.隐式类型转换---内部隐式调用了显式的方法

1.isNaN()----检测数据是不是非数类型。

中间隐含了一个隐式转换,它会先将你传的参数调用一下Number方法之后,再看看结果是不是NaN,这个方法可以检测NaN本身。

isNaN(NaN); // true
isNaN('abc'); // true  Number('abc')= NaN
isNaN('123'); // false
isNaN(null);//false    Number(null) = 0
isNaN(undefined);//true Number(undefined) =NaN

 2.++,  -- ,  +,-(一元正负),    -,*,/,%(二元)

运算之前,先把变量调用Number方法,转换为数字,再运算

var a = '124';
var b = a++;
console.log(typeof(b)+':'+b);//number:124
var a = +'abc';  //+或-
console.log(a); //NaN
var a= 'a' *1;  //NaN
var b = '123'*1; //123

 3.+(二元操作符)当加号两侧有一个是字符串,就调用String方法,把两个都变成字符串

var a = '1'+ 1;
console.log(typeof(a)+':'+a);//string:11

4.&& ,||  ,!-----运算之前,先把表达式调用Boolean方法,转换为布尔值,再运算

&&,||返回的结果还是本身表达式的结果。

var a = 'abc';
console.log(!a); // false
var c='aa' && 22;
console.log(c);//22
//引用值也进行类型转换
[]+2//"2"
[]+''//""

5.<,>,<=,>=----有数字进行比较的(不论在操作符左边还是右边),就会隐式转换为数字

var a= 10 > '2';
console.log(typeof(a)+':'+a);//boolean:true
var a= '10' > 2;
console.log(typeof(a)+':'+a);//boolean:true
var a= '10'>'2';//没有类型转换,比的是ASCII
console.log(typeof(a)+':'+a);//boolean:false

6.==   != (也有隐式转换)

var a= '1'==1;
console.log(typeof(a)+':'+a);//boolean:true
var a= '1'== true;
console.log(typeof(a)+':'+a);//boolean:true

注意:NaN==NaN//false,NaN是唯一一个不等于自己的

var a = 3>2>1;//先比较3>2--true;true>1--1>1--false
console.log(a);//false

 注意:

undefined ==0;//false
undefined <0;//false
undefined >0;//false
undefined>=0;//false
undefined<=0;//false
null==0;//false
null>0;//false
null<0;//false
null>=0;//true
null<=0;//true
null==undefined;//true

 三.不发生类型转换: ===,!==

'123' === 123; // false;
true === 'true'; // false
1 !== '1'; // true
1 !== 1; // false

 

//注意:引用值比较的是地址
{}=={}//false
[]==[]//false

 

 

posted @ 2018-08-08 10:11  StupidTom  阅读(3373)  评论(0编辑  收藏  举报