数据类型

数据类型

  • 基础类型存储在栈内存,被引用或拷贝时,会创建一个完全相等的变量

  • 引用类型存储在堆内存,存储的是地址,多个引用指向同一个地址,这里会涉及一个“共享”的概念

基本数据类型

  • 数值(number)

  • 字符串(string)

  • 布尔值(boolean)

  • undefined

  • null

  • symbol

  • bigInt

引用数据类型

  • 对象(Object)

    • 正则(RegExp)

    • 数组(Array)

    • 函数(Function)

    • 日期(Date)

    • 数学工具库(Math)

首先明确一个点 原始类型中存储的都是对应的数值 是没有方法可以调用的 比如 undefined.toString()

但是你顺着这个思路 如果去调用 ‘1’.toString() 你会发现调用成功了

因为这种情况下 ‘1’已经被强转成了 String 类型 所以可以调用 toString 方法

number

  • js 内部,所有数字都是以 64 位浮点数形式储存,所以 1 === 1.0 为 true 即 1 和 1.0 是同一个数

常用方法

  • parseInt

  • parseFloat

  • isNaN

  • isFinite

  • isInteger

常用属性

  • EPSILON

特殊数值

  • NaN (not a number)

  • +0 / -0

  • Infinite

本质上还是 number

string

  • 无法改变字符串之中的单个字符

常用方法

  • charAt

    • 返回指定索引的字符

    • 如果指定的 index 值超出了该范围,则返回一个空字符串

  • slice

  • split

  • trim / trimStart / trimEnd

    • 删除字符串两侧的空白 多用于 input 去除用户输入的空格

  • includes

  • endsWith / startsWith

  • concat

  • indexOf

    • 返回第一次出现的索引值 未找到返回-1

  • padStart / pafEnd

    • 填充字符串达到指定长度

  • repeat

  • toLowerCase / toUpperCase

boolean

原始值

转换目标

结果

number

boolean

除了 -0 +0 NaN 都是 true

string

boolean

除了 空串 都是 true

undefined / null

boolean

false

引用类型

boolean

true

object

  • 对象就是一组键值对(key - value)的集合

  • 对象的键会转换为 string 类型

  • 对象是引用类型

具体可以参考 https://luckychou.gitee.io/FE/JS/object/

function

  • 函数是一等公民

    • 由于函数与其他数据类型地位平等,所以在 js 中又称函数为第一公民

具体可以参考 https://luckychou.gitee.io/FE/JS/function/

array

  • 数组是一种特殊的对象

具体可以参考 https://luckychou.gitee.io/FE/JS/array/

undefined

  • 对象没有这个属性名,属性值默认就是 undefined

  • 函数定义形参不传值,默认就是 undefined

  • 在数组的 find 方法中,没有找到的情况下是 undefined

  • 函数定义没有返回值(return 或者 return 后面什么也不带),默认的返回值就是 undefined

  • 在变量提升(预解析)阶段,只声明未定义,默认值就是 undefined

  • 在 JS 的严格模式下(”use strict”),没有明确的主体,this 指的就是 undefined

null

确定数据类型

  • typeof

  • instanceof

  • Object.prototype.toString

typeof

  • 作用于基础数据类型时 除了 null 会返回 object 其他都返回正确的数据类型

  • 作用于引用数据类型时 除了 function 会返回正确的数据类型时 其他都返回 object

instanceof

  • 通过 instanceof 我们能判断这个对象是否是之前那个构造函数生成的对象

此外 number/boolean/string 也可以用它们的构造函数来创建

Object.prototype.toString

可见 上述两种方法都无法准确判断出每一种数据类型 那么有没有一种方法可以判断出所有的数据类型呢

答案就是Object.prototype.toString

例如

我们可以得到一个[object,xxx]的字符串 []中的后者就是我们想要的每一种数据类型

我们稍微包装一下方法

特殊类型比较

Symbol

Symbol 是一种原始数据类型 表示独一无二的值

BigInt

BigInt 可以表示任意大的整数

BigInt 和 Number 不能混合运算

四组运算

在进行四则运算的时候 都会转成基础数据类型再进行运算

加法运算符

运算中其中一方为字符串,那么就会把另一方也转换为字符串

如果一方不是字符串或者数字,那么会将它转换为数字或者字符串

除了加法运算符 只要其中一方是数字,那么另一方就会被转为数字

Last updated

Was this helpful?