zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    poj_1836 动态规划
    动态规划——最长上升子序列
    poj_3260 动态规划
    poj_3628 动态规划
    动态规划——背包问题
    poj_2559 单调栈
    poj_3415 后缀数组+单调栈
    poj_2823 线段树
    poj_2823 单调队列
    poj_3250 单调栈
  • 原文地址:https://www.cnblogs.com/freefy/p/9440214.html
Copyright © 2011-2022 走看看