数据类型

48 阅读4分钟

数据类型介绍

Undefined

只有一个值,undefined; undefined值由null值派生而来; 变量声明时未初始化,它的值就是undefined; 是一个假值

Null

只有一个值,null; 表示一个空的对象指针; 也是一个假值

注意:

  1. null == undefined // true ==操作符会隐式转换它的操作数
  2. {} != null // true 另,开发中用 {}定义初始化对象变量--这是一个没有内容的对象,有原型链;null啥也没有

Boolean

只有两个值, true 和 false; Boolean() 可以显示的将任意值转为布尔值 隐式转换:在if等流控语句中会自动执行其他类型值到布尔值的转换

转换为false的值(6个值,其余全为true)

  1. false
  2. ""(空字符串)
  3. 0,NaN
  4. null
  5. undefined

Number

使用八进制(前缀0o),十六进制(前缀0x)创建的数值在任何数学运算中都被视为十进制整数,返回的结果都是十进制永远不要用浮点数进行运算,存在精度问题 科学计数法:3.14e7 或 3.14E7

值的范围

  1. NUMBER_MIN_VALUE(最小值) NUMBER_MAX_VALUE(最大值) Infinity(无穷大) -Infinity(无穷小)
  2. 可以用 isFinnite()判断一个值是否有限大,返回false则超出超出范围
  3. 安全整数

NaN

  • (Not a Number):用于表示本来要返回数值的操作失败了(而不是返回错误)
  • 任何涉及NaN的操作始终返回NaN
  • NaN不等于包括NaN在内的任意值
  • isNaN() 函数判断是否为NaN,注意isNaN()函数接收到一个值后,会尝试将它转换为数值,任何不能转换为数值的值都会导致这个函数返回 true
例子:
console.log(isNaN(NaN)); // true
console.log(isNaN('10')); // false
console.log(isNaN('10')); // false
console.log(isNaN('blue')); // true
console.log(isNaN(true)); // false

数值转换

转换方法: Number() 、parseInt() 、parseFloat()、 +(一元加操作符) Number():转型函数,可用于任何数据类型; parseInt() 、parseFloat() :将字符串转换为数值

  1. Number()的转换规则(+号规则相同)
  • 布尔值,true转为1,false转为0;
  • 数值,直接返回;
  • null,返回0;
  • undefined,返回0;
  • 字符串:
  1. 如果字符串仅包含数字(或八进制,十六进制)和加减号,则返回对应的十进制的数值,浮点数则返回浮点数;
  2. 空字符串,则返回0;
  3. 其他情况,则返回NaN;
  • 对象:调用valueOf()方法,并按照上述规则转换返回的值,如果结果为NaN;则调用toString()方法,再按照上述规则转换
  1. parseInt()的转换规则

只要首个字符(忽略前面的空格)是数字和加减号,就可以转换 空字符串,返回NaN 有第二个参数,用于指定 进制数,默认10

  1. parseFloat()的转换规则

和parseInt大致相同。 不过会识别第一个“.” ;且只解析十进制值

// Number()
console.log(Number('12.9a')); // NaN
// 字符串中仅能包含数字,无论非数值字符是在前还是在后,都返回NaN
console.log(Number('12.9')); // 12.9
console.log(Number('-12.9')); // -12.9
console.log(Number('*12.9')); // NaN 仅能解析加减号
console.log(Number('012.9')); // 12.9
console.log(Number('0xa')); // 10
console.log(Number('0o17')); // 15
console.log(Number('   ')); // 0

// parseInt()
console.log(parseInt('12.9a')); // 12
console.log(parseInt('   ')); // NaN
console.log(parseInt('0xa')); // 10
// 第二个参数指定后,第一个参数只能作为对应进制数来解析
console.log(parseInt('0xa', 10)); // 0 

// parseFloat()
console.log(parseFloat('12.9a')); // 12.9
console.log(parseFloat('0xa')); // 0

String

表示零或多个Unicode字符序列 length属性:返回16位字符的个数(所以会包含空格和换行!!)

  • 字符串的特点:是不可变的。即要修改某个变量的字符串值,必须先销毁原始的字符串,然后将包含新增的另一个字符串保存到该变量。
  • 转换为字符串:
    1. toString()方法:可用于 数值、布尔值、对象、字符串值。null和undefined没有该方法; 另外,在对数值调用toString()方法时,可传入参数指定进制数
    2. Sting()方法:可对null和undefined使用,其他的调用toString()方法。
    3. 拼接字符串:用+号和字符串拼接,也可以返回字符串;
  • 模板字符串: 保留换行符,且每行开头以“\n”开头;
  • 字符串插值: 模板字符串,使用${} 插入变量,以前要用“+”号拼接,

Symbol

BigInt

Object

数据类型检测方法汇总

  • typeof 操作符
  • instanceof 操作符

typeof操作符

// 省略console.log()
typeof 'string' // string

检测类型函数的封装

class Typeof{

}