JS里的数据类型

作者: Liveup | 来源:发表于2018-10-20 00:10 被阅读8次

    一、种类

    截止目前,JavaScript有七种数据类型:number,string,boolean,symbol (ES6增),null,undefined,object 。
    其中,前六种属于基本数据类型,object 属于可由基本类型组成的复杂类型。

    二、熟练掌握

    1. 数据类型好比经济基础,打好了地基才能构建高楼,这是踏入JS的第一步。
    2. (由于设计上的Bug)没有一个能完美辅助我们判断上述数据类型的方法。
      判断类型常用到 typeof 操作符,typeof xxx 之后得到的都是字符串。
    xxx 的类型 number string boolean symbol undefined null object function
    typeof xxx 'number' 'string' 'boolean' symbol 'undefined' 'object' 'object' 'function'

    关于 typeof 的两大Bug如下:

    typeof null // 'object'
    typeof function() {} // 'function'
    

    三、基本类型 number string boolean null undefined

    值不可变的,即值本身无法被改变

    1. number 数字类型

    JavaScript 内部,所有数字均以64位浮点数存储,并没分离出整数类型,所以 1 === 1.0,表示同一个数字。但是当运算需要整数时,JavaScript 又会自动把 64位浮点数 转成 32位整数,然后再进行运算。

    浮点 是一种对于实数的近似值数值表现法,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次指数得到。以这种表示法表示的数值,称为浮点数(floating-point number)。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入
    准确性:由于浮点数不能表达所有实数,浮点运算与相应的数学运算有所差异,有时此差异极为显著。
    —— 摘取自维基百科

    相对定点数而言,浮点数是小数点可变的数,从上述定义可以看出,浮点数不是精确的值,它的小数运算可能由于丢失精度,往往不是我们所期望的结果,所以涉及小数的比较和运算要特别小心。

    0.2 + 0.4 // 0.6000000000000001
    0.6 / 0.1 // 5.999999999999999
    (0.3 - 0.2) === (0.2 - 0.1)  // false
    
    数值表示和进制

    数字可采用科学计数法表示,使用 eE进行缩写,如:1.23e2 == 123。
    当 ①小数点前的数字多于21位 ②小数点后的零多于5个,此时JavaScript会自动数值转为科学计数法表示。

    JavaScript 的整数有4种字面量表示格式,分别是十进制、二进制、八进制、十六进制,而且默认情况下,其他进制表示的数值会自动转为十进制表示。

    • 十进制:没有前导0或单个数值大于7的数值。
    71  // 71
    081 // 81
    
    • 二进制:有前缀0b或0B的数值。
    0b1001  // 9
    0B010   // 2
    
    • 八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。

    前导 0 表示八进制,处理时很容易造成混乱。ES5 的严格模式和 ES6,已经废除了这种表示法,但是浏览器为了兼容以前的代码,目前还继续支持这种表示法。

    071  // 57
    0o11 // 9
    
    • 十六进制:有前缀0x或0X的数值。
    0x11  // 17
    0XA1  // 161
    
    特殊数值

    number类型包含几个特殊数值,包括 +0、-0、NaN、+Infinity、-Infinity
    NaN表示“非数字”(Not a Number),一些数值相关操作出错时就会得到NaN,可通过 !isNaN(xx) 判断该值是否为有效数字,还有 typeof NaN == 'number'。

    2. string 字符串类型

    零个或多个字符由成对的单引号'' 或 双引号 "" 包裹起来的形式就是字符串

    转义

    为什么要转义?

    • 字符串的内容包含单引号或双引号
    • 字符串中表示一些特殊含义的字符,如换行符、制表符等

    转义符
    转义符以反斜杠(\)开头,用来表示一些特殊字符。
    串。

    转义符 含义 Unicode 字符值
    \0 null \u0000
    \b Backspace \u0008
    \f 换页符 \u000C
    \n 换行符 \u000A
    \r 回车键 \u000D
    \t 制表符 \u0009
    \v 垂直制表符 \u000B
    ' 单引号 \u0027
    " 双引号 \u0022
    \ 反斜杠 \u005C

    多行字符串(一个字符串分多行书写)

    // ① \后不能任何字符,换行后的必须顶格,出错难找,如②
    var s = '1234  \
    590'
    
    // ② 报错
    var s = '1234 \   
    590'
    
    // ③ 前两种都不推荐
    var s3 = '1234' + 
             '590' 
    
    // ES6 新增
    var s4 = `1234
        590`         // 包括了输入的特殊字符 等价于 "1234 ↵ 590"
    s4.length        // 10
    

    3. boolean 布

    1)“布尔”的由来:纪念一位敬业的逻辑学家乔治·布尔而得名
    2)取值,只有两个值:true(真) 和 false(假)
    3)&&(逻辑且) 、||(逻辑或) 逻辑操作真值表口诀: a && b 一假必假; a || b 一真必真
    4)熟记五个falsy值:0 null undefined NaN ''或""(空字符串)

    4. symbol 符号

    唯一特性:使用Symbol()可以创建一个全局唯一的值,其类型为symbol。

    5. null 和 undefined

    两者皆表示什么也没有,它们的区别如下:
    1)语法上,如果变量只是声明没赋值,则它默认值为 undefined
    2)惯例而言,有一个对象object,现在还不想赋值,则赋值为 null(一般表示空对象);有一个非对象,还不想给值时,则赋值为 undefined(一般表示空非对象)。

    四、复杂类型(object 对象)

    1. 概述

    对象(object)是最重要的数据类型。
    对象就是哈希表,即一组“键值对“(key: value)的集合,是一种无序的复合数据集合。

    2. 声明赋值
    var person = {
        name: 'Amanda',
        age: 22,
        married: undefined,
        graduate: true,
        'good-friends': {
            name: 'June'   
        },
        '': null
    }
    
    • key: value的形式中key为字符串,value可以是任意七种数据类型。
    • 空串属于字符串,可以被当作对象数据的key。
    • 如果key为合法标识符,书写时,作为字符串标识的引号可以被省略,但key仍然是字符串。
    3. 访问、编辑对象

    两种访问对象的方式:(1)变量名[key] (2)变量名.key

    var obj = {
        code: 0001,
        'data-text': 'a box'   
    }
    
    obj.code            // 0001
    obj['code']         // 0001
    obj['data-text']    // 'a box'
    obj.data-text       // Uncaught ReferenceError: text is not defined
    
    // 赋值
    obj.name = 'div'    
    obj.name = undefined
    
    'name' in obj       // true
    delete obj.name     // 删除obj.name属性
    'name' in obj       // false
    
    Object.keys(obj)    // ["code", "data-text"]
    

    由上可知,变量名[key] 属于通用方法,只有当key满足合法标识符时,才能使用 变量名.key 访问。

    • 通过 delete命令 删除对象属性
    • in 操作符判断对象中是否存在这个key
    • Object.keys 方法获取一个对象所有的key

    相关文章

      网友评论

        本文标题:JS里的数据类型

        本文链接:https://www.haomeiwen.com/subject/kwmjzftx.html