zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

js数据类型知识梳理

2023-02-25 18:27:41 时间

1. 两大数据类型

1.1 基本数据类型

  • Number(数值)
  • String(字符串)
  • Boolean(布尔值)
  • Null(空值)
  • undefined(未定义)
  • symbol(唯一值)

存放于栈内存中。

具有占据空间小,内存固定的特点

基本数据类型的值是不可修改的,只会被替换

1.2 引用数据类型

  • Object
  • Array
  • Date
  • Function
  • RegExp

引用类型存储在堆内存中.

具有占据空间大、内存不固定的特点。 (如果存储在栈中,将会影响程序运行的性能)

引用类型在栈中只保存了指针,而实体保存在堆里。

2. 类型转换

2.1 转为数值

  • Number()

接收一个全数字字符串,转为数值。

只要传的字符串中有一个不是数字的字符,或者没传字符串,就会返回 NaN

  • parseInt()/parseFloat()

接收一个数字开头的字符串,转化为取整/带小数 的数值类型。

只要传的字符串不是数字开头,或者没传字符串,就会返回 NaN

  • 隐式转换

所有运算符:+-*/ == === > < !=

都会隐式转为数值类型

+(加号有特殊情况) ,它既是连接符,也是运算符。

1.只要 + 两边出现字符串,就会变成字符串拼接。

2.当只有 + 后面有值,例如:+"123"等同于Number("123"),会将字符串转换为数字123

2.2 转为字符串

  • toString()

除undefined、null之外,所有类型数据的原型里自带的方法。

对不同类型数据有不同的转化方法,但转出来的数据始终是字符串。

对数字可以转化成制定进制的数字字符串

对字符串转出来效果不变

对布尔值转化成字符串布尔值

对数组会转成扁平化并用逗号隔开的字符串

对对象可以判断对象的类型

  • String()

跟toString效果几乎一样

不同点就是通过传入参数去使用,而不是原型方法的调用

undefined、null也能转

  • 隐式转换

通过 + "" 可转化为字符串,原理是加号两边只要出现字符串就会变成字符串拼接

2.3 转为布尔

除了 0 ""(空字符串) null undefined NaN 会转换成 false 其它都会转换成 true

  • 通过判断符(逻辑非运算符)

!可以转为布尔值并取反

!!可以转为正确的布尔值

  • Boolean()

效果等同于!!

3. 类型判断

3.1 typeof关键字

语法: typeof 数据

  • 适合用来判断基本类型,会返回基本类型的字符串
  • 如果用于判断引用类型,一律返回object,所以不建议
  • 需要注意一点:判断null也会返回object,因为一些特殊原因

3.2 instanceof关键字

语法:数据 instanceof 引用具体类型

  • 只能用来判断引用类型 , 会返回true/false
  • 如果用来判断基本类型,一律返回false
  • 如果instanceof Object 都会返回true,因为引用类型本质都是对象

3.3 constructor

语法: 数据.constructor

  • 基本和引用全都可以判断,会返回类型的构造函数,比较通用的方法
  • console.log([].constructor === Array) //true

3.4 Object.prototype.toString.call()

也是通用的方法,基本和引用全都可以判断,不太常用的一种方法

1var arr = []
2Object.prototype.toString.call(arr) == "[object Array]" //true
3
4var func = function() {}
5Object.prototype.toString.call(func) == "[object Function]" //true