JavaScript数据类型

231 阅读4分钟

数据类型

JS中存在5种简单数据类型:Undefined、Null、Boolean、Number和String。还有一种复杂数据类型——Object。
所有的值最终都将是上述6种数据类型之一。

typeof 操作符

返回一个代表变量的数据类型的字符串

  1. 'undefined'——如果这个值未定义
  2. 'boolean'——如果这个值是布尔值
  3. 'string'——如果这个值是字符串
  4. 'number'——如果这个值是数值
  5. 'object'——如果这个值是对象或null
  6. 'function'——如果这个值是函数

Undefined 数据类型

该类型只有一个值即 undefined。当一个变量被定义但是未赋值,则其值为 undefined
当使用typeof的时候,未定义变量和未声明变量都为 undefined

let a;
typeof a // undefined
typeof b // undefined

Null 数据类型

该类型只有一个值即 null,其含义为空对象指针,所以 typeof nullobject

Boolean 数据类型

当其他类型转换为Boolean类型时,具有以下对应关系:

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 空字符串(即"")
Number 任何非零数字值 0和NaN
Object 非null的对象 null
Undefined 因为只有一个值永远时false undefined

Number 数据类型

整数

存在8进制,以0开头,如果0后的字面量超出8进制则作为10进制,严格模式下不存在8进制 存在16进制,以0x开头

浮点数

保存浮点数的空间时保存整数值的两倍。所以1.0会被转换为1 做浮点数的一些测试的时候须小心,例如0.1 + 0.2 === 0.3 // false

数值范围

最大最小值分别保存在:Math.MAX_VALUE Math.MIN_VALUE

NaN

即非数值(Not a Number)其有两个特点:

  1. 任何设计NaN的操作都返回NaN
  2. NaN与任何值都不相等,包括自身

isNaN()

该方法接受一个任意数据类型的参数,返回布尔值代表该参数是否是 非数值

当参数是简单数据类型的时候,方法会将参数数值化,如果成功则返回false,否则返回true

当参数是对象时,会首先调用对象的valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果不能,则基于这个返回值的toString()方法再判断

数值转换

可以将非数值转换数值,有以下三个方法:

Number()
parseInt()
parseFloat()

Number()

  1. true转1,false转0
  2. 数字原样返回(包括进制,8,16)
  3. null转0
  4. undefined转NaN
  5. 如果是空字符串转0,如果是数字的字符串('123'可以但是'x123'不可以)则转数字,否则转NaN,16进制字符串转16进制转换十进制后的数字,八进制忽略前导零
  6. 如果是对象则先调用valueOf()方法,如果返回基本数据类型则走以上原则返回,如果返回一个对象则调用toString()方法走以上原则,且不递归处理两个方法返回的值

parseInt

其工作机制是先去除字符串前面的空格,找到第一个非空格字符,如果该字符为不是数字字符或者正负号,则返回NaN,如果解析到数字或正负号则接着匹配,且测试中依旧不能识别八进制,但是可以识别16进制,所以需要第二个参数来确定返回的数字的进制

parseFloat

与parseInt功能相似,但是值得注意的是会忽略前导零后16进制永远都解析成0,所以parseFloat只能解析十进制数值

String 数据类型

字符串是不可变的,一旦创建,想要修改只能将原来的销毁

除了null和undefined,其他数据类型都具有toString方法,而且在Number类型调用toString方法时,可以加入一个进制参数来获取对应的进制的字符串。

Object 数据类型

Object的原型链上有几个基本的属性和方法:

constructor // 该属性保存了创建当前对象的函数
hasOwnProperty(propertyName) // 用于检查给定的属性在当前对象的实例中而不是在原型链上,参数为字符串
isPrototypeOf(object) // 用于检测传入的对象是否是当前对象的原型
prototypeIsEnumerable(prototypeName) // 用于检测给定的属性是否能够用 for-in 来枚举
toLocaleString() // 返回对象的字符串表示,和执行上下文环境的地区对应
toString() // 返回对象的字符串表示
valueOf() // 返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同

持续更新在github