zoukankan      html  css  js  c++  java
  • JavaScript类型转换方法及需要注意的问题

      一、类型转换的方法和应该注意的问题:
    1.
    转换为布尔型:
    1)用两次非运算(!):
    !!5 ==> true
    2)用布尔型的构造函数:
    new Boolean(5) == > true
    值转换为布尔类型为false
    0
    +0-0NaN""(空字符串),undefined,null
    除上面的值其他值在转换以后为true,需要特别提到的是:
    "0",new Object(),function(){}
    2.
    转换为字符串类型:
    1)加上空字符串""
    123 +
     "" = "123"
    2)用字符串构造函数:
    new String(123) = "123".
    需要特别注意的转化:
    +0 ==> "0"
    -0 ==> "0"
    -Infinity ==>"-Infinity"
    +Infinity ==>"+Infinity"
    NaN ==> "NaN"
    undefined ==> "undefined"
    null ==> "null"
    new Object() ==> "[object Object]"
    function(){} ==> "function(){}"
    3.
    转换为数值型:
    1 取正(+), 减零 -0), 乘一,(*1),除以一(/1),取负(-,这个得到相反的值)。
    +"123" = 123
    +true = 1
    2)用构造函数Number();
    new Number("123") = 123
    几个需要特别注意的转化:
    ""
    (空字符串) ==> 0
    "010" ==> 10
    "0x10"(16
    进制) ==> 16
    "-010" ==> -10
    "-0x10" ==> NaN
    undefined ==> NaN
    null ==> 0
    true ==> 1
    false ==> 0
    new Object() ==> NaN
    new function(){} ==> NaN


    二、隐式类型转换:
    (1)
    二元加法运算(+):如果两个操作数中有一个是String类型,将把两个操作数转换为String类型再相加。
    如果两个操作数中没有字符串类型,那么将把两个操作数转换为数值类型再做运算。
    举例:
    "123"+123 = "123123";
    123+123 = 246
    true + true = 2
    true + undefined = NaN
    (因为undefined转换为数值为NaN,所有结果为NaN)
    true + null = 1 (null
    转换为数字是0)
    "123" + null = "123null" (
    包含字符串将转化为字符串相加)
    "123" + undefined = "123undefined"
    undefined同样适用)
    1 + 2 + "123" = "3123" (1+2
    是首先按照数值型计算的)
    (2)
    二元减乘除运算(-*/):因为只有数值类型才有 - * / 运算,所以会先将两个操作数转换为数值型再做运算。
    "123"-123 = 0
    (3)
    一元取正(+),取负运算符(-):取正或者取负都是针对数值型的运算,所以会将操作数转换为数值型再做运算。
    +"123" = 123
    -"123" = -123
    +"123e" = NaN
    +"123f" = NaN
    +"123e-2" = 1.23 
    (4)
    一元非(!)运算符:非运算符需要将操作数转化为布尔类型。
    !"123" = false
    !!"123" = true
    !123 = false
    !!123 = true
    (5)
    逻辑运算符(&&)和(||):
    &&或者||的两侧被判断的时候会被转为布尔类型进行判断,
    但是我在测试的时候却发现一个有趣的事情。
    &&
    运算符:如果有一个项为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


    三、类型转换函数
    1
    .parseFloat转换为浮点数:
    字符解析函数获取每一个字符直到遇到不属于数值的字符,然后返回它已获取的数值.
    几个需要特别注意的:
    ""
    (空字符串) ==> NaN
    "123e-2" == > 1.23 (
    科学计算法是可以识别的)
    "010" ==> 10 (8
    进制不能识别)
    "0x10"==> 0 (16
    进制不识别)
    "-010" ==> -10 
    null,undefined,true,false,new Object(),function(){} ==> NaN
    2.parseInt
    转换为有符号整数:
    parseFloat相似,但是他会把小数位舍掉(注意不是四舍五入,是完全舍弃,跟Math.floor处理方式一样),而且他可以识别八进制和16进制表示方式:
    123e-2 == > 1
    "123e-2" ==> 123
    "010" == > 8 
    "0x10" ==> 16
    "-010" == > -8 
    "-0x10" ==> -16
    null,undefined,true,false,new Object(),function(){},-Infinity +Infinity NaN ==> NaN
    3.
    三个取整函数的区别
    1Math.ceil():“天花板,很形象吧?就是取大于等于参数的最小整数。
    8.7 == > 9
    -8.7==> -8
    2Math.floor():"地板",取小于等于参数的最小整数。
    8.7 ==> 8
    -8.7 ==> -9
    3Math.round():"四舍五入"取整数。

  • 相关阅读:
    专职DBA-MySQL主从延时复制
    专职DBA-MySQL主从异步复制
    专职DBA-MySQL连接启动与多实例数据库
    Java日期时间2
    Java日期时间
    763. Partition Labels
    377. Combination Sum IV
    459. Repeated Substring Pattern
    784. Letter Case Permutation
    526. Beautiful Arrangement
  • 原文地址:https://www.cnblogs.com/gaoweipeng/p/1871881.html
Copyright © 2011-2022 走看看