zoukankan      html  css  js  c++  java
  • js——类型转换

      总述                  

    • 类型转换:显式、隐式(自动)
    • 隐式转换是由编译器自动进行的,基本主要抽象操作有ToPrimitive, ToNumber, ToString, ToBoolean等
    • 显式转换是通过调用Number(), String(), Boolean()等来实现,后面的操作实际是和隐式一样的原理

      隐式转换           

    • ToPrimitive(input[, PreferredType]):根据可选的类型值,把input转换成非对象(基本类型); ToNumber和ToString转换对象时会调用该操作
    input类型 返回结果

    Undefined/Null/Boolean

    /Number/String

    输入为基本类型,结果与输入的一样
    Object

    根据内部方法[[DefaultValue]](hint)返回结果,不同的PreferredType(hint)有不同的操作

    • hint为String

    1. 如果toString()返回基本类型,将其作为结果

    2. 否则,如果valueOf()返回基本类型,将其作为结果

    3. 否则,抛出TypeError异常

    • hint为Number

    1. 先判断valueOf再判断toString(与上面String的相反),否则抛出TypeError异常

    • hint没有指定

    Date类型的会把hint默认设置为String,其它会以Number处理

    • ToNumber
    输入值类型 返回结果
    Undefined NaN
    Null +0
    Boolean 1: true, 0: false
    Number 与输入一致
    String

    个人总结:看起来像数字的字符串可以转换成相应的数字,否则返回NaN,具体例子如下

    Object 返回ToPrimitive(input, Number)结果

    String转换成Number 

     1 //空格
     2 Number("");//0
     3 Number("  01");//1
     4 //正负数
     5 Number("+9");//+9
     6 Number("-9");//-9
     7 //指数e
     8 Number("-9e-1");//-0.9
     9 Number("-9E-1");//-0.9
    10 //无穷数
    11 Number("-Infinity");//-Infinity
    12 //不同进制
    13 Number("0B10");//2
    14 Number("0O10");//8
    15 Number("0X10");//16
    16 //数字
    17 Number("100000000000000000000000000000");//1e+29
    18 Number("0000.100");//0.1
    19 //转换成了NaN
    20 Number("-   0");//NaN
    21 Number("ln10");//NaN
    • ToString
    输入的类型 返回值
    Undefined/Null/Boolean/String

    "undefined"/"null"/"true"/"false"/与输入一致

    基本类型,输入和返回一样

    Number  对某些输入稍处理,然后作为字符串输出
    Object 使用ToPrimitive(input, String)结果

    Number转换成String

     1 String(NaN);//-"NaN"
     2 String(-Infinity);//"-Infinity"
     3 //正负数
     4 String(-0);//"0"
     5 String(+0);//"0"
     6 String(-9);//"-9"
     7 String(+9);//"9"
     8 //指数,会自动转换,有效位数尽量少
     9 String(0.000000009);//"9e-9"
    10 String(1000000000000000000000000000000000);//"1e+33"
    11 String(0.9e1);//"9"
    12 String(0.9e-10);//"9e-11"
    13 //会自动省去多余的0
    14 String(0.90000000000000000);//"0.9"
    15 //进制
    16 String(0B10);//"2"
    17 String(0O10);//"8"
    18 String(0X10);//"16"
    • ToBoolean
    结果 输入值
    false (基本类型)0, -0, +0, NaN, "", false, Null, Undefined
    true 基本类型中除上述的值,Object(所有Object都是!)
    •  ToObject
    输入的类型 返回结果
    Undefined/Null TypeError异常,Object(null/undefined)结果均为{}
    Boolean/Number/String 对于基本类型会先创建一个对象,并把输入值作为对象的primitiveValue
    Object 与输入相同

      产生隐式转换的操作  

    转换为数字类型:数字运算符都会尝试把变量转换为数字,如~, <<, >>, +, -, *, /, ^, %, &, |, ++等

    +:如果操作数不是数字,则通过ToPrimitive(input, number)进行转换。若结果中有操作数为字符串,则执行字符串拼接,否则执行数字加法

    转换为布尔类型

    if(..), while(...), for(;...;...), ?:, ||, &&(选择器运算符), !, !!     

    ==宽松相等比较,根据操作数的不同进行不同的类型转换

    操作数类型 转换方式:对象->非对象,非数字->数字
    string+number string转换为number
    boolean+其它

    boolean先转换为number,再做比较

    "42"==true;//false

    "42"==false;//false

    null+undefined null == undefined;//true
    对象+非对象 对象利用ToPrimitive拆封获得非对结果,再比较

      显式类型转换          

    显式调用 隐式
    Number(input) ToNumer(input)
    String(input) ToString(input)
    Boolean(input) ToBoolean(input)
    Object(input) ToObject(input)

    参考

    ECMAScript规范5.1

    《你不知道的javascript》中卷

  • 相关阅读:
    Mac下tomcat的安装与配置
    jquery中的属性和css
    jquery中的选择器
    数组对象元素的添加,String对象,BOM对象以及文档对象的获取
    js中的函数,Date对象,Math对象和数组对象
    js中的循环语句
    js中的运算符和条件语句
    js中的数据类型及其转换
    js的意义,引用方法及变量
    移动端网页项目总结
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/7155994.html
Copyright © 2011-2022 走看看