• JavaScript的类型转换


    JavaScript数据类型大体分为两类:primitive和object,primitive包括:string,boolean,number,undefined,null;object包括:object,array,function。

    JavaScript在期待某种类型的地方,而该地方的数据类型是其他的类型的时候,JavaScript会自动地进行类型的转换,比如在if条件判断中,条件表达式需要一个boolean类型,但是条件表达式的结果为undefined,数字等等的时候,JavaScript会把这些数据转换成boolean,然后判断。如:

    var x=5;

    if(x){//x是个数字,值等于5,但是if需要的是boolean,所以把5转成boolean,为true,条件里的代码得以执行。

    }

    下面讲解下,不同数据类型之间的转换规则:

    一、primitive到primitive转换

    1、string转换到boolean:空字符串转换后为false,其他所有的字符串转换后都为true

    2、string转换到number:可以解析成一个数值的字符串可以转换成对应的数值,并且忽略首尾的空格。如果首尾是非空格字符,转换成数字后为NaN。

    3、boolean转换为string:true:"true",false:"false"

    4、boolean转换为number:true:1,false:0

    5、number转换为string:0:"0",-0:"0",Infinity:"Infinity",-Infinity:"-Infinity",NaN:"NaN",12:"12"

    6、number转换为boolean:0,-0,NaN:false,其他所有的number都为true

    7、undefined转换为string:"undefined"

    8、undefined转换为boolean:false;

    9、undefined转换为number:NaN

    10、null转换为string:"null"

    11、null转换为boolean:false

    12、null转换为number:0

    二、primitive到Object转换:

    1、string,boolean,number转成Object,是相应的转换成其对应的包装类型:String,Boolean,Number

    2、null,undefined不能转换成Object,强转的话,报TypeError错误。

    三、Object到primitive转换:

    1、Object到boolean的转换:所有的Object转换后都为true,包括array,function。也包括Boolean(false)。

    Object到number和string的转换,是通过调用他们对应的对象上的方法来实现的。JavaScript的对象上有两个方法来执行转换,一个是toString(),一个是valueOf().所有的对象都继承了这两个方法。

    toString()方法是返回对象的字符串表示形式,该方法默认返回的是一个没有特别意义的字符串,但是Array,Date,RegExp,Function对该方法进行了特别的定义,返回的字符串有相应的意义。

    valueOf()方法执行的任务没有很好地定义,如果对象存在对应的原始类型,它应该是返回该对象对应的原始数据类型,但是对象是复合类型,一般不存在一个单一的原始类型与之对应。所以默认该方法返回的是这个对象本身,而不是一个原始类型。但是包装类(Number,Boolean,String)的这个方法返回的是其包装的原始类型,Array,Function,RegExp继承默认的方法。Date的这个方法返回的是该时间距离1970.1.1所经历的时间间隔,以毫秒为单位。

    解释了toString和valueOf方法,继续看看Object到number和string的转换。

    2、Object到string的转换步骤:

    a.如果对象存在toString方法,调用它,如果返回的是原始类型的值,JS把原始类型的值转成string(如果原始类型不是string类型才转),然后返回该值。

    b.不存在toString方法或者返回值不是原始类型的话,检查是否存在valueOf方法,如果存在,调用它,如果返回的是原始类型的值,JS把原始类型的值转成string(如果原始类型不是string类型才转),然后返回该值。

    c.通过这两个方法都无法获取一个原始类型值,抛出TypeError异常。

    3、Object到number的转换步骤:(和string类似,只是先检查的是valueOf方法,然后是toString)

    a.如果对象存在valueOf方法,调用它,如果返回的是原始类型的值,JS把原始类型的值转成number(如果原始类型不是number类型才转),然后返回该值。

    b.检查是否存在toString方法,如果存在,调用它,如果返回的是原始类型的值,JS把原始类型的值转成number,然后返回该值。

    c.通过这两个方法都无法获取一个原始类型值,抛出TypeError异常。

    四、显示转换

    前面三种都是隐式的自动转换,JavaScript也可以显示地进行类型转换,这是通过包装类进行的,比如:

    Number("67");//字符转数值:67

    String(false);//"false"

    Boolean([]);//数组转boolean,值为true

    Object(3);//new Number(3)

    上面讲了不同类型之间的自动转换规则,那么在哪些条件下会引起或者说触发相应的转换呢?下面列出一些场景:

    1、if,while等条件语句中,前面有例子。

    2、不同数据类型进行运算的时候,比如:

    "23"+5//二元运算符+(加)把数值5转成字符串,所以结果为"235"

    +"23”+5//第一个一元运算符+(取正,注意和上例的区别) 把"23"字符串转成数值23,所以结果为28

    "23"-true//二元运算符-(减)把其他类型转成数值型,所以结果为22

    3、比较运算符的两边,数据类型不同时,可能会转换。

    比如这四个表达式都为true:undefined==null,"0"==0,"0"==false,0==false

    这是因为在进行比较前的时候,等号两边不同的数据类型会进行类型转换,转成相同类型(最终是何种类型,下面有规则说明)再比较(undefine和null例外,他们不转换,默认认为他们相等)。

    但是需要注意的是,就算等号两边的类型可以转换,转换后的值也相等,并不意味着他们就真的相等。比如:undefined==false返回的是false,说明他们并不相等。

    这是因为==两边的类型在转换的时候,永远不会被转换成boolean类型。那么到底转换的时候,遵循什么规则呢?

  • 相关阅读:
    方差分析 | ANOVA | 原理 | R代码 | 进阶 | one way and two way | Analysis of Variance
    GT sport真实赛道详解
    如何成为F1车手?
    统计学 | 漫想
    (转)什么是P问题、NP问题和NPC问题
    一个完整的成年果蝇大脑的电子显微镜图谱 | A Complete Electron Microscopy Volume of the Brain of Adult Drosophila melanogaster
    文献导读 | A Pan-Cancer Analysis of Enhancer Expression in Nearly 9000 Patient Samples
    综述
    GSEA
    (转)决定系数R2
  • 原文地址:https://www.cnblogs.com/winson/p/3337372.html
Copyright © 2020-2023  润新知