JS之数据类型相关

来源:互联网 发布:slack软件 编辑:程序博客网 时间:2024/04/30 01:37

数据类型分类

  • 原始类型
    • 值直接保存在变量本地的数据类型
    • 5种: Null | Undefined | Boolean | String | Number
  • 引用类型
    • 值不保存在变量本地的数据类型

数据类型详解

  • 首先说一个运算符: typeof
    • typeof运算符有一个参数, 即要检查的变量或值
    • 对变量或值调用typeof运算符将返回下列值之一:
      • object——如果变量是引用类型或Null类型
      • 其余4中原始类型返回对应的类型值
    • 注意: 为什么typeof运算符对于Null类型会返回”object”? 这实际上是JavaScript最初实现时的一个错误, 然后被ECMAScript沿用了。现在, null被认为是对象的占位符, 从而解释了这一矛盾, 但从技术上来说, 它仍然是原始值。
  • 原始类型之Undefined
    • Undefined类型只有一个值undefined。当声明的变量未初始化时, 该变量的默认值是undefined。
    • 函数无明确返回值时, 返回的也是值undefined
    • 注意: 值undefined并不同于未定义的值。但是typeof运算符并不真正区分这两种值。
      • 当变量未声明而直接使用typeof运算符时, 将返回undefined。
      • 但当未声明的变量使用其它运算符时, 将会报错。
  • 原始类型之Null
    • Null类型只有一个值null, 即它的字面量。
    • 值undefined实际上是由值null派生来的, 因此ECMAScript把它们定义为相等的。
    • 尽管这两个值相等, 但它们的含义不同。undefined是声明了变量但未对其进行初始化时赋予该变量的值, null则用于表示尚未存在的变量。如果函数或方法要返回的是对象, 那么找不到该对象时, 返回的通常是null。
  • 原始类型之Boolean
    • Boolean类型有两个值true和false(即两个Boolean字面量)
  • 原始类型之String
    • String类型是唯一没有固定大小的原始类型。可以用字符串存储0或更多个Unicode字符, 用16位整数表示。
    • 字符串中每个字符都有特定的位置, 首字符从位置0开始, 第二个字符在位置1, 以此类推。
    • 字符串字面量是由单引号或双引号声明的。
    • 字符串的内容一旦创建, 不可改变。要想改变, 只能用另一个新字符串替换。
    • String类型还包括几种字符字面量, 包括换行符\n、制表符\t等。
  • 原始类型之Number
    • Number类型既可以表示32位的整数, 也可以表示64位的浮点数
    • 直接输入的(而非从另一个变量访问的)任何数字都被看做是Number类型的字面量
    • 整数也可以被表示为八进制或十六进制的字面量。八进制字面量的首数字必须为0。十六进制字面量的首两位必须为0x, 其后接十六进制数, 十六进制字母可大写, 亦可小写。
    • 注意: 尽管所有整数都可以被表示为八进制或十六进制字面量, 但所有的数学运算返回的都是十进制的结果。
    • 浮点数在进行计算前, 真正存储的是字符串
    • 科学计数法
      • 如var fnum = 5.618e7表示5.618x107
      • 如var fnum = 8-e17表示8x10-17
    • 特殊的Number值
      • Infinity | -Infinity | NaN
    • 如果计算返回的是无穷大值, 那么生成的结果不能再用于其他计算。
    • 两个方法:
      • isFinite(), 可以对任何数调用isFinite()方法, 以确保该数不是无穷大
      • isNaN(), 判断一个数字是否为数字

数据类型转换

  • 两大类转换方式: 隐式转换和强制转换
    • 隐式转换: 不需要程序员干预, JS自动完成的类型转换。
      • 隐式转换无处不在, 只要JS认为有必要。
      • 算术运算中, 一切数据都默认转换为数字, 再计算。
        • Null类型: null->0
        • Undefined类型: undefined->NaN
        • Boolean类型: true->1 ; false->0
        • 在+运算中, 碰到字符串, +就变为字符串拼接, 另一个不是字符串的数据, 自动转换为字符串。
    • 强制转换:程序员主动调用专门的函数, 执行转换
      • 何时使用: 自动转换的类型, 不是想要得到的
      • 任意类型->字符串API
        1. x.toString(); x不是undefined或null时, 才可用
        2. String(x); 相当于隐式转换, 此法万能
      • 任意类型->数字API
        1. Number(x); 专用于将非字符串类型转数字, 相当于隐式转换(字符串转数字将转换为NaN)
          • 字符串->数字API
            1. parseInt(str): 从第一个字符开始, 依次读取每个数字, 只要碰上第一个非数字字符就停止, 自动跳过开头的空字符
              • 注意: 不认识小数点
              • 何时使用: 将字符串转为整数时
            2. parseFloat(str):用法同parseInt
              • 注意: 认识小数点
              • 何时使用: 将字符串转为小数时
      • 任意类型->BooleanAPI
        1. Boolean(x); 相当于隐式转换
          • 以下5值转换为false, 其它均转换为true
            • ”” | NaN | undefined | null | 0
      • 快速转换:
        • 任意类型->String
          • x+”“
        • 任意类型->Boolean
          • !!x
0 0