• JavaScript数据类型转换方法汇总


    转换为布尔型

    用两次非运算(!):

    1 !!5 ==> true

    用布尔型的构造函数:

    1 new Boolean(5) == > true

    值转换为布尔类型为false:0,+0,-0,NaN,""(空字符串),undefined,null

    除上面的值其他值在转换以后为true,需要特别提到的是:"0",new Object(),function(){}

    转换为字符串类型

    加上空字符串"":

    1 123 + "" "123"

    用字符串构造函数:

    1 new String(123) = "123".

    需要特别注意的转化:

    1 +0 ==> "0"
    2 -0 ==> "0"
    3 -Infinity ==>"-Infinity"
    4 +Infinity ==>"+Infinity"
    5 NaN ==> "NaN"
    6 undefined ==> "undefined"
    7 null ==> "null"
    8 new Object() ==> "[object Object]"
    9 function(){} ==> "function(){}"

    转换为数值型

    取正(+), 减零 (-0), 乘一,(*1),除以一(/1),取负(-,这个得到相反的值):

    1 +"123" = 123
    2 +true = 1

    用构造函数Number();

    1 new Number("123") = 123

    几个需要特别注意的转化:

    01 ""(空字符串) ==> 0
    02 "010" ==> 10
    03 "0x10"(16进制) ==> 16
    04 "-010" ==> -10
    05 "-0x10" ==> NaN
    06 undefined ==> NaN
    07 null ==> 0
    08 true ==> 1
    09 false ==> 0
    10 new Object() ==> NaN
    11 new function(){} ==> NaN

    隐式类型转换

    二元加法运算(+):如果两个操作数中有一个是String类型,将把两个操作数转换为String类型再相加。如果两个操作数中没有字符串类型,那么将把两个操作数转换为数值类型再做运算。

    1 "123"+123 = "123123";
    2 123+123 = 246
    3 true true = 2
    4 true + undefined = NaN (因为undefined转换为数值为NaN,所有结果为NaN)
    5 true null = 1 (null转换为数字是0)
    6 "123" null "123null" (包含字符串将转化为字符串相加)
    7 "123" + undefined = "123undefined" (undefined同样适用)
    8 1 + 2 + "123" "3123" (1+2是首先按照数值型计算的)

    二元减乘除运算(-*/):因为只有数值类型才有 - * / 运算,所以会先将两个操作数转换为数值型再做运算。

    1 "123"-123 = 0

    一元取正(+),取负运算符(-):取正或者取负都是针对数值型的运算,所以会将操作数转换为数值型再做运算。

    1 +"123" = 123
    2 -"123" = -123
    3 +"123e" = NaN
    4 +"123f" = NaN
    5 +"123e-2" = 1.23

    一元非(!)运算符:非运算符需要将操作数转化为布尔类型。

    1 !"123" false
    2 !!"123" true
    3 !123 = false
    4 !!123 = true

    逻辑运算符(&&)和(||):

    在&&或者||的两侧被判断的时候会被转为布尔类型进行判断,但是我在测试的时候却发现一个有趣的事情。

    &&运算符:如果有一个项为false,那么表达式返回false,如果所有的项都不为false,那么表达式返回最右边一个项的原始值。

    123 && 23 && 45 返回 45,而不是我们想象中的true。所以如果有 123 && 23 == true 那么应该是false。至于if(123 && 23) 认为是true那应该是把23转换为布尔类型了。

    ||运算符:对 || 测试的结果也和我想象的不一样,|| 返回第一个转换以后不为false的值,如果都为false,它将返回最后一个为false的值(未进行类型转化之前的值)。

    举例:123 || 23 返回 123,而不是想象中的true.false || null 返回null, 而不是想象中的false。

    类型转换函数

    parseFloat转换为浮点数:

    字符解析函数获取每一个字符直到遇到不属于数值的字符,然后返回它已获取的数值。几个需要特别注意的:

    1 ""(空字符串) ==> NaN
    2 "123e-2" == > 1.23 (科学计算法是可以识别的)
    3 "010" ==> 10 (8进制不能识别)
    4 "0x10"==> 0 (16进制不识别)
    5 "-010" ==> -10
    6 null,undefined,true,false,new Object(),function(){} ==> NaN

    parseInt转换为有符号整数:

    跟parseFloat相似,但是他会把小数位舍掉(注意不是四舍五入,是完全舍弃,跟Math.floor处理方式一样),而且他可以识别八进制和16进制表示方式:

    1 123e-2 == > 1
    2 "123e-2" ==> 123
    3 "010" == > 8
    4 "0x10" ==> 16
    5 "-010" == > -8
    6 "-0x10" ==> -16
    7 null,undefined,true,false,new Object(),function(){},-Infinity +Infinity NaN ==> NaN

    三个取整函数的区别:

    Math.ceil():"天花板",很形象吧?就是取大于等于参数的最小整数。

    1 8.7 == > 9
    2 -8.7==> -8

    Math.floor():"地板",取小于等于参数的最小整数。

    1 8.7 ==> 8
    2 -8.7 ==> -9

    Math.round():"四舍五入"取整数。

  • 相关阅读:
    uva 10881
    uva 1388
    【USACO 3.2.5】魔板
    【USACO 3.2.4】饲料调配
    【USACO 3.2.3】纺车的轮子
    【USACO 3.2.2】二进制数01串
    【USACO 3.2.1】阶乘
    【USACO 3.1.6】邮票
    【USACO 3.1.5】联系
    【USACO 3.1.4】形成的区域
  • 原文地址:https://www.cnblogs.com/xiaoyang002/p/4100357.html
Copyright © 2020-2023  润新知