美文网首页
JavaScript隐式转换之道

JavaScript隐式转换之道

作者: 有鱼是只猫 | 来源:发表于2020-02-02 22:15 被阅读0次

JavaScript的数据类型隐式转换主要分为三种情况

场景一:算术运算符

转化原则:大致是换为数值,个别是换为字符串

-*/%运算符

①字面量及new内置对象,true为1;false为0

②null为0

③undefined为NaN

④字符串的字面量及new内置对象,空字符串为0,纯数字为数字本身,带有非数字时为NaN;

⑤对象及数组等引用类型,先变为字符串,再根据④进行转变

+号运算符

以上④、⑤情况下,作为拼接符使用

场景二:==比较运算符

转换原则为:

布尔值是一种特殊的数字,所以参与运算就三种类型,数字、字符串、对象

数字和字符串为基本类型,对象为引用类型

引用类型必须转化为基本类型进行比较

如果两个基本类型进行比较时,如字符串和数字比较时,目标是数字

具体参考以下详细说明:

①布尔值和数字,变为数字

②字符串和数字,变为数字

③对象和字符串,对象变为字符串

④对象和数字,对象变为字符串,再变为数字;

⑤对象和布尔值,对象变为字符串,再变为数字;布尔值变为数字

        // 布尔值——>数值

        console.log(true+1);//1+1

        console.log(false+12);//0+12

        // null、undefined——>数值

        console.log(null+12);//0+12

        console.log(undefined+12);//NaN

        //字符串——>数值

        // ①做运算时,+号为拼接,其他运算符变为数值,其中''为0,纯数字时变为数字本身,有其他非数字时,直接为NaN

        var chuan = '';

        console.log(chuan+12);// 字符串拼接,结果为12

        console.log(chuan-12);// 转换为0,结果为-12

        var chuan = '0';

        console.log(chuan+12);// 字符串拼接,结果为012

        console.log(chuan-12);// 转换为0,结果为-12

        var chuan = '1';

        console.log(chuan+12);// 字符串拼接,结果为112

        console.log(chuan-12);// 转换为1,结果为-11

        var chuan = '1a';

        console.log(chuan+12);// 字符串拼接,结果为1a12

        console.log(chuan-12);// 转换为1a,结果为NaN

        // ②做对比时==,其中''为0,其他纯数字时为数字本身,有其他非数字时,为NaN

        // ③做对比时===,全部为false,因为类型不一样

        var dui = '';

        if(dui==0){

            console.log(true);

        }else{

            console.log(false);

        }

        if(dui===0){

            console.log(true);

        }else{

            console.log(false);

        }

        var dui = '0';

        if(dui==0){

            console.log(true);

        }else{

            console.log(false);

        }

        if(dui===0){

            console.log(true);

        }else{

            console.log(false);

        }

        var dui = '1';

        if(dui==1){

            console.log(true);

        }else{

            console.log(false);

        }

        if(dui===1){

            console.log(true);

        }else{

            console.log(false);

        }

        var dui = '1a';

        if(dui==NaN){

            console.log(true);

        }else{

            console.log(false);//false 因为NaN不等于NaN

        }

        if(dui===NaN){

            console.log(true);

        }else{

            console.log(false);

        }

        // 对象——>数值

        // 对象时,+号运算符时,为拼接,拼接到最后一个元素上,其他运算符为NaN

        var duixiang = {name:1};

        console.log(duixiang+1);

        console.log(duixiang-1);

        // 数组时,+号运算符时,为拼接,拼接到最后一个元素上,其他运算符为NaN

        var duixiang = [1,2,3];

        console.log(duixiang+1);

        console.log(duixiang-1);

        // new出来的字符串对象,+号为拼接符,其他运算符变为对应数字

        var duixiang = new String('1');

        console.log(duixiang+1);

        console.log(duixiang-1);

        // new出来的数值对象,变为对应数字

        var duixiang = new Number(1);

        console.log(duixiang+1);

        console.log(duixiang-1);

        // new出来的布尔值对象,true为1,false为0

        var duixiang = new Boolean(true);

        console.log(duixiang+1);

        console.log(duixiang-1);

场景三:if()语句

转化原则:换为布尔值进行判断

①数值型——>布尔值 0和NaN为false,其他均为true

②字符串——>布尔值 只有空字符串''为false,其他均为true

③null、undefined——>为false

④对象(数组、正则、函数)——>只要是对象(null除外),都为true

⑤所有new操作符创建的对象——>都为true

⑥两个逻辑非!!,可以把类型变为布尔值,如 !!0的值为false、!!{}的值为true

总结:0、NaN、''、null、undefined 5种形式为false,其他都为true

    // 数值——>布尔值

        var ling = 0;

        var ling = -0;

        var ling = NaN;

        var ling = 3;

        var ling = -3;

        if(ling){

            console.log(true);

        }else{

            console.log(false);

        }

        // 字符串——>布尔值

        var zifu = '';

        var zifu = '0';

        var zifu = '-0';

        var zifu = '12';

        var zifu = 'false';

        var zifu = 'true';

        var zifu = '[]';

        if(zifu){

            console.log(true);

        }else{

            console.log(false);

        }

        // null、undefined——>布尔值

        var teshu = undefined;

        var teshu = null;

        if(teshu){

            console.log(true);

        }else{

            console.log(false);

        }

        // 对象——>布尔值

        var dui = {};

        var dui = [];

        var dui = function(){};

        var dui = /./;

        var dui = new Date();

        if(dui){

            console.log(true);

        }else{

            console.log(false);

        }

相关文章

  • JavaScript隐式转换之道

    JavaScript的数据类型隐式转换主要分为三种情况 场景一:算术运算符 转化原则:大致是换为数值,个别是换为字...

  • 2-JavaScript-的包装类和基本检测 隐式转换

    1 +new Date() --隐式转换 JavaScript的隐式转换,在使用“ + - | ~~ ”的时候会先...

  • javascript数据类型隐式转换

    javascript数据类型隐式转换 一、函数类 isNaN()改函数会对参数进行隐式的Number()转换,如果...

  • js类型转换

    javaScript类型转换 标签(空格分隔): 未分类 隐式转换 当遇到以下几种情况,JavaScript会自动...

  • JavaScript精选练习(1)

    打印100以内的所有质数 写出斐波那契数列 如果对于隐式类型转换不太了解可以看看:JavaScript隐式类型转换

  • 03.【JS怪癖1】隐式类型转换

    参考资料:JavaScript 的怪癖 1:隐式类型转换 1.布尔值的隐式转换 1.1 转为false 四种情况:...

  • javascript 隐式转换

    1、如果两个不同的类型做加减运算,会做隐式转换 结果 第一条语句在运算前,数字50会被转换成字符串"50",第二条...

  • javascript 隐式转换

    你有没有在面试中遇到特别奇葩的js隐形转换的面试题,第一反应是怎么会是这样呢?难以自信,js到底是怎么去计算得到结...

  • JavaScript预编译

    JavaScript预编译,你不知道的JavaScript 隐式类型转换 typeof   typeof 用来校验...

  • 类型转换

    在JavaScript中,共有两种类型转换:隐式类型转换,显示类型转换。 “字符串”转换为“数字” 在JavaSc...

网友评论

      本文标题:JavaScript隐式转换之道

      本文链接:https://www.haomeiwen.com/subject/uulcxhtx.html