zoukankan      html  css  js  c++  java
  • js之数据类型及类型转换

    一.数据类型
    js中的数据类型:
         5种基础类型:Undefined,Null,Boolean,Number,String
         1种复合类型:Object(对象包括数组,函数等)
     
    1.字符串String
         字符串是一组由16位值组成的不可变的有序序列,由单引号或双引号括起来的字符序列。
         字符串的长度是其所包含的16位值的个数
         字符串可以通过\反斜线来转义
     
    2.数字Number
         数字是由整数和浮点数组成的
         infinity表示无穷大的数,表示超出js所能表示的数字的上限
         NaN表示非数字值,且NaN与其他任何值都不相等,包括它自身
     
    3.布尔值Boolean
         布尔值是有true和false两个值组成的,且在js中true和false都是保留字。
         
    4.Undefined
         Undefined是有undefined一个值组成的,通常用来表示未定义或’值的空缺’。
     
    5.Null
         Null是由null一个值组成的,通常用来表示’空值’,对null执行typeof运算,会返回’object’,所以通常null一般被认为是一个空对象的引用。
     
    6.对象Object
         对象是是属性的容器,其中每个属性都有名字和值。对象类型包括对象,数组和函数。
     
    二.类型转换
    显示转换:
    使用String(), Number(), Boolean(), Object()分别对数据进行字符串,数字,布尔值,对象等的转换,也称为强制转换,用法如下:
    String(123)//“123"
    Number(‘123’)//123,
    Number(‘fddas4234’)//NaN
    Boolean(0)//false
    Boolean(23)//true
    Boolean(‘adsf’)//true
    Object(3)//new Number(3)
     
    而且除了null和undefined外,其他任何值都具有toString(),通常toString()方法和String()方法返回的结果一致!
    parseInt()和parseFloat()方法分别把数据转换成整数和浮点数,parseInt()方法还可以接受第二个参数,表示转换的基数:
    parseInt(11, 2)//3
     
    而对于对象都继承了两个转换方法,第一个是toString()方法,他返回:
    ({a:1}).toString()//“[object object]"
    第二个方法是valueOf(),大多数情况下,valueOf()方法只是简单的返回对象本身:
    ({a:1}).valueOf()// {a:1}
     
    隐式转换:
    在js中,很多情况下部分运算符会对操作数进行隐式的类型转换,这也是很多面试官喜欢在面试题中考大家的重点内容如:
    1 + '1'//‘11'
    2 - ‘1’ // 1
    +'32'//32
    !0//true
    var a = 2; a++ //2
    var a = 2; ++a//3
    

    在js中,- * /会把操作数转换成数字,但是请注意,+比较特殊,因为在js中,+号不仅是数字运算符,也是字符串连接符,所以在出现加号的时候就要根据具体情况去看结果了,如果+号的两端都是数字,那么结果自然也是数字,同理两端都是字符串,那么结果也同样是字符串,如一端是数字,一端是字符串,那么就会把数字先转换成字符串,在进行连接,所以结果是字符串:

    1 + 1//2
    ‘1’ + ’2’//’12'
    1 + ‘1’ //‘11'
    ‘2’ + 1//‘21'
    

      

    同时还要注意,在多个数同时进行运算时,同样要按照运算符的优先级顺序进行计算:
    '12' + 1 * 2//‘122’
    12 + 1 + ‘2’//‘132'
     
    在这里特别要注意的是相等性比较运算符==也会对操作数进行隐式转换,而===则不会进行类型转换:
    0 == false//true
    '1' == 1//true
    1 === ‘1’//false
    
    类型检测:
    typeof运算符:
    typeof 返回:undefined,boolean,number,string,object,function。6种值
    在对null进行typeof操作是返回object,这是因为null一般被认为是一个空对象的引用,所以会返回object
    在对数组进行typeof运算时同样也会返回object,这在遇到需要对数组进行类型检测的时候,显然是无法使用typeof运算符的,这是我们可以使用对象的toString()方法:
    Object.prototype.toString.call([1,2])//"[object Array]"
    这样我们可以简单封装成一个检测是否为数组的函数:
    function isArray(array) {
         return Object.prototype.toString.call(array).slice(8, 13) === 'Array';
    }
    //isArray()方法返回true or false
    isArray(123)//false
    isArray([1,2])//true
    

      

     
    同样的,也可以封装成一个类型检测函数:
    function type(array) {
         return Object.prototype.toString.call(array).match(/\w+/g)[1];
    }
    //type()返回”String",”Number",”Object",”Function”,”Boolean”,”Null",”Undefined”,”Array”等具体的类型
    type(NaN)//”Number"
    type(undefined)//"Undefined"
    type([1,2])//"Array"
    type(’sdfsd’)//”String"
    type(null)//”Null"
    type({a:2})//”Object"
    type(function(){})//”Function”
    type(true)//”Boolean”
    

      

     
    instanceof运算符:
    instanceof运算符用于检测所给数据是否属于所给的类型:
    [1,2] instanceof Array //true
    不过对于字符串,数字的原始值的检测中instanceof总是返回false
    ‘dsa' instanceof String//false
    new String(123) instanceof String//true
    

      

     
    当还有一种方式可以用.constructor检测其构造函数的方式来进行类型检测:
    "fdsff".constructor == String//true
    

      

  • 相关阅读:
    Benchmarking Apache Kafka, Apache Pulsar, and RabbitMQ: Which is the Fastest?
    Kafka实战:集群SSL加密认证和配置(最新版kafka-2.7.0)
    Postgresql 编译安装教程
    CentOS在线和离线安装PostgreSQL
    ubuntu apt-get update连不上dl.google.com解决方法
    ubuntu E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法
    ubuntu apt-get更新出现W: GPG error: http://repo.mysql.com trusty InRelease
    hadoop3.2.2 ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes
    Hudi on flink v0.7.0 使用遇到的问题及解决办法
    RocksDB in Flink官方答疑:Using RocksDB State Backend in Apache Flink: When and How
  • 原文地址:https://www.cnblogs.com/xjser/p/4962767.html
Copyright © 2011-2022 走看看