js中的数据类型

按照 ECMAScript规范可以分为两个不同类型的值:基本数据类型和引用数据类型。

基本数据类型指的是简单的数据段

引用数据类型指的是有多个值构成的对象。

当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。

基本数据类型和引用数据类型的区别:

1.内存区域不同:

基本数据类型和引用数据类型分别存放在不同的内存区域。基本数据类型存放在栈区,引用数据类型存放在堆区。

就是引用数据类型会在栈区存放数据的引用和地址指针(指向堆区中相应的数据),数据实体则存放在堆区。

2.不同的内存分配机制也带来了不同的访问机制

在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个引用数据类型时,
首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值这就是传说中的按引用访问

基本数据类型的值则是可以直接访问到的。

3.复制变量(变量赋值)时的不同

基本数据类型: 在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已

引用数据类型:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。只是多了一个指针只想相同地方的地址。

4.参数传递的不同

基本数据类型; 只是把变量里的值传递给参数,之后参数和这个变量之间互不影响。

引用数据:对象变量它里面的值是这个对象在堆内存中的内存地址,它传递的值是这个内存地址,函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

数据类型:

基本数据类型:引用数据类型
Undifined:未定义object: 在js中Object是一个基类
Null:空 typeof null ==> "object"[]: Array 数组
Boolean:true\false/^$/: RegExp 正则
Number:NaN\Infinity\正常数字function 函数
String:正常字符串\模版字符串data 日期
Symbol: 唯一值
 BigInt: 大数字

常见的判断数据类型:

Typeof 检测基本数据类型 typeof 对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用

typeof(null) //object

typeof(undefined) //undefined

instanceof

instanceof 检测的是原型 不考虑 null 和 undefined(这两个比较特殊)以对象字面量创建的基本数据类型

instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型

constructor

似乎完全可以应对基本数据类型和引用数据类型 但如果声明了一个构造函数,并且把他的原型指向了 Array 的原型,自定义构造函数的原型改了之后,函数找不到原型,这种情况下,constructor 也显得力不从心。检测undfinded和null无效

原型

Object.prototype.toString.call()

jquery.type() //如果对象是undefined或null,则返回相应的“undefined”或“null”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值