js数据类型的转换

隐式类型转换:没有主动做,在执行过程中转换了,执行结束后,原数据没有改变

        - 场景:什么情况下会发生转换

            - 运算符:算术、关系、逻辑

        - 规则:转换规则是什么

            - 算术:`+`:只要一边是字符,结果就都是字符

                    `-、*、/、%`:都是转成数值

            - 关系:只要一边是数值,就会转成数值后进行比较

            - 逻辑:转成布尔

<script>

        // 字符和数值之间的算术运算

        var a = "1";

        console.log( a - 0 );       // 数据类型为number,运行检测结果为1

        console.log(typeof (a - 0) ); 


        console.log( a );           // 数据类型为string,运行检测结果为1

        console.log(typeof (a) ); 

        console.log( a + 1 );       // 数据类型为string,运行检测结果为11

        console.log(typeof (a + 1) ); 

        console.log( a * 1 );       // 数据类型为number,运行检测结果为1

        console.log(typeof (a * 1) ); 

        console.log( a / 1 );       // 数据类型为number,运行检测结果为1

        console.log(typeof (a / 1) ); 

        console.log( a % 2 );       // 数据类型为number,运行检测结果为1

        console.log(typeof (a % 2) ); 

        // - 场景:什么情况下会发生转换

        //      - 运算符:算术、关系、逻辑

        // - 规则:转换规则是什么

        //      - 算术:`+`:只要一边是字符,结果就都是字符

        //             `-、*、/、%`:都是转成数值

        // 字符和数值之间的关系运算

        var a1 = "230";

        var a2 = 32;

        console.log(a1 > a2);           // 数据类型为boolean,运行的结果是true

        console.log(typeof (a1 > a2) );


        console.log(a1 >= a2);          // 数据类型为boolean,运行的结果是true

        console.log(typeof (a1 >= a2) );


        console.log(a1 < a2);           // 数据类型为boolean,运行的结果是false

        console.log(typeof (a1 < a2) );


        console.log(a1 == a2);          // 数据类型为boolean,运行的结果是false

        console.log(typeof (a1 == a2) );


        console.log(a1 !=  a2);          // 数据类型为boolean,运行的结果是true

        console.log(typeof (a1 != a2) );


        console.log(a1 === a2);          // 数据类型为boolean,运行的结果是false

        console.log(typeof (a1 === a2) );


        console.log(a1 !== a2);          // 数据类型为boolean,运行的结果是true

        console.log(typeof (a1 !== a2) );

        // !==代表两边的数据类型和数值都不相等

        // !=只代表两边的数值不相等

        // 只要出现数值,就是数值的比较规则

        // 非数值会自动转换成数值进行比较

    </script>

强制类型转换:主动转换,可以拿到转换结果

        - 字符转数值

            - `parseInt(要转换的字符)`

                - 将字符转换成整数,从左向右依次检测,

                - 能转则转,不能转则停,

                - 第一位不能转,运行检测结果为NaN,

                - 不识别小数点

            - `parseFloat(要转换的字符)`

                - 将字符转换成小数,从左向右依次检测,

                - 能转则转,不能转则停,(转换结果可能是小数,也可能是整数或者NaN)

                - 第一位不能转,运行检测结果为NaN

            - `Math.round(要转换的字符)`

                - 不是专门做数据转换,处理数据的过程中,可以转换,

                - 严格转换,不允许任何位置出现非数字的字符,(一旦出现,运行检测结果为NaN)

                - 四舍五入取最近的整数(转换结果一定是是整数或者NaN)

            - `Number(要转换的字符)`

                - 不是专门做数据转换,处理数据的过程中,可以转换,

                - 严格转换,不允许任何位置出现非数值的字符(一旦出现,运行检测结果为NaN)(转换结果可能是小数,也可能是整数或者NaN)

                - (可以识别小数)

        - 数值转字符

            - `要转换的数值.toString()`

                直接转,没有规则,(数字转出来还是是数字,可以识别小数,NaN转出来还是NaN)

            - `要转换的数值.toFixed(n)`

                直接转,根据输入的数字,决定保留n位小数,不够的位数补零,NaN转出来还是NaN数字的小数取舍与浏览器兼容有关

            - `String(要转换的数值)`

                - 不是专门做数据的转换,处理数据的过程中,可以转换,

                - 直接转,没有规则,(数字转出来还是是数字,可以识别小数,NaN转出来还是NaN)

        - 其他转布尔

            - `Boolean()`

                - 不是专门做数据转换,处理数据的过程中,可以转换

                - 数值:非0为true,0为false。

                - 字符:非空为true,空为false。

                - undefined,null,NaN,都是false。

                - 对象{},数组[],函数function(){},都是true。

    <JavaScript 对象是变量的容器。数据值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。引用数据类型:对象(Object)、数组(Array)、函数(Function)。>

    <script>

    // 第一类:字符转数值

        // var x = "356.789";      // console.log(parseInt(x))=356

        // var x = "356";          // console.log(parseInt(x))=356

        // var x = "35a6";         // console.log(parseInt(x))=35

        // var x = "35a6.789";     // console.log(parseInt(x))=35

        // var x = "a356.789";     // console.log(parseInt(x))=NaN

        // var x = "a356";         // console.log(parseInt(x))=NaN

    console.log(parseInt(x));

    // parseInt(要转换的字符)将字符转换成整数,从左向右依次检测,能转则转,不能转则停,第一位不能转,运行检测结果为NaN,不识别小数点。

        // var x = "356.789";           // 356.789

        // var x = "356";               // 356

        // var x = "35a6";              // 35

        // var x = "356.7a89";          // 356.7

        // var x = "35a6.789";          // 35

        // var x = "a356.789";          // NaN

        // var x = "a356";              // NaN

    console.log(parseFloat(x));

    // parseFloat(要转换的字符)将字符转换成小数,从左向右依次检测,能转则转,不能转则停,(转换结果可能是小数,也可能是整数)第一位不能转,运行检测结果为NaN。

        // var x = "356.789";           // 357

        // var x = "356.4";             // 356

        // var x = "356";               // 356

        // var x = "35a6";              // NaN

        // var x = "356.7a89";          // NaN

        // var x = "35a6.789";          // NaN

        // var x = "a356.789";          // NaN

        // var x = "a356";              // NaN

    console.log(Math.round(x));

    // Math.round(要转换的字符)不是专门做数据转换,处理数据的过程中,可以转换,属于严格转换,不允许任何位置出现非数字的字符,一旦出现,运行检测结果为NaN,四舍五入取最近的整数。

        // var x = "356.789";           // 356.789

        // var x = "356.4";             // 356.4

        // var x = "356";               // 356

        // var x = "35a6";              // NaN

        // var x = "356.7a89";          // NaN

        // var x = "35a6.789";          // NaN

        // var x = "a356.789";          // NaN

        // var x = "a356";              // NaN

    console.log(Number(x));

    // Number(要转换的字符)不是专门做数据转换,处理数据的过程中,可以转换,属于严格转换,不允许任何位置出现非数字的字符,一旦出现,运行检测结果为Na,(可以识别小数)。

    // 第二类:数值转字符

        // var n = 123.345;        // console.log(n.toString())=123.345

        // var n = 123.3;          // console.log(n.toString())=123.3

        // var n = 123.5;          // console.log(n.toString())=123.5

        // var n = 123;            // console.log(n.toString())=123

        // var n = NaN;            // console.log(n.toString())=NaN

    console.log(n.toString());

    // 要转换的数值.toString()是直接转,没有规则,有多少数值数据就转出来多少。

        // var n = 123.345;         // console.log(n.toFixed(1))=123.3

                                    // console.log(n.toFixed(2))=123.34


        // var n = 123.34;          // console.log(n.toFixed(1))=123.3

                                    // console.log(n.toFixed(2))=123.34


        // var n = 123.255;         // console.log(n.toFixed(1))=123.3!!!!

                                    // console.log(n.toFixed(2))=123.25

//存在疑问!!!!!!!!!

        // var n = 123.555;         // console.log(n.toFixed(1))=123.6!!!!

                                    // console.log(n.toFixed(2))=123.56!!!

        // var n = 123.3;           // console.log(n.toFixed(1))=123.3

                                    // console.log(n.toFixed(2))=123.30

        // var n = 123;             // console.log(n.toFixed(1))=123.0

                                    // console.log(n.toFixed(2))=123.00


        // var n = NaN;             // console.log(n.toFixed(1))=NaN

                                    // console.log(n.toFixed(2))=NaN       

    console.log(n.toFixed(1))

    console.log(n.toFixed(2))

        // 要转换的数值.toFFixed(n)是直接转,根据输入的数字,决定保留n位小数,不够的位数补零,NaN转出来还是NaN。

        // var n = 123.345;        // console.log(String(n))=123.345

        // var n = 123.3;          // console.log(String(n))=123.3

        // var n = 123.5;          // console.log(String(n))=123.5

        // var n = 123;            // console.log(String(n))=123

        // var n = NaN;            // console.log(String(n))=NaN

    console.log(String(n))

    //String(要转换的数值)不是专门做数据的转换,处理数据的过程中,可以转换,直接转,没有规则,NaN转出来还是NaN。

    // 第三类:其他转布尔


        console.log( Boolean( 123.456 ) );      // true

        console.log( Boolean( 123 ) );          // true

        console.log( Boolean( -123 ) );         // true

        console.log( Boolean( -123.456 ) );     // true

        console.log( Boolean( 0 ) );            // false

        console.log( Boolean( NaN ) );          // false

    // 数值:非0为true,0、NaN 为false。

        console.log( Boolean( "0" ) );          // true

        console.log( Boolean( " " ) );          // true

        console.log( Boolean( "" ) );           // false

        console.log( Boolean( "false" ) );      // true

        console.log( Boolean( "hello" ) );      // true

    // 字符:非空为true,空为false。

        console.log( Boolean( undefined ) );        // false

        console.log( Boolean( null ) );             // false

        console.log( Boolean( {} ) );               // true

        console.log( Boolean( [] ) );               // true

        console.log( Boolean( function(){} ) );     // true

    // undefined,null,NaN,都是false。

    // 对象{},数组[],函数function(){},都是true。

    </script>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,467评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,079评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,600评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,835评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,848评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,348评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,735评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,705评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,238评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,268评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,395评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,012评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,704评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,177评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,309评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,925评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,457评论 2 365

推荐阅读更多精彩内容