Javascript中的基本类型和引用类型概述说明

 更新时间:2022年11月30日 09:42:49   作者:@乐知者@  
这篇文章主要介绍了Javascript中的基本类型和引用类型的相关资料,包括基本类型和引用类型的概念及区别,数据类型检测给大家详细介绍了js基本类型和引用类型,非常不错,需要的朋友可以参考下

简单概述

js变量可以划分为两种不同的数据类型:

  • 基本类型:undefined、null、Boolean、Number、String、Symbol(ES6)
  • 引用类型:除基本类型以外,也可以理解为对象,如:Object、Array、RegExp、Date、Function等

类型的区别在于:

基本类型引用类型
可变性不可变可变
存储区栈区栈区和堆区
访问按值访问按引用访问
两者比较值的比较引用的比较

详细说明

值的可变性

基本类型(以string类型为例):

let person = '小明';
person.age = 18;
console.log(person.age);  // undefined

引用类型值(原始值)可添加属性和方法:

let person = { name: '小落子' };
person.age = 18;
person.addAge = function() {
    person.age2 = person.age + 1;
}
person.addAge();
console.log(person.age, person.age2);  // 18 19

这样就说明了,基本类型的值是不可变的,而引用类型的值是可变的

存储

基本类型存储结构:

栈区栈区
name小红
age18

基本类型的变量存放在栈区(栈区指内存里的栈内存,stack)

栈区保存了变量的标识和变量的值

引用类型存储结构:

引用类型的存储需要内存的栈区和堆区共同完成(堆区指内存里的堆内存,heap)

栈区保存了变量的标识符和指向堆内存中该对象的指针(该对象在堆内存的地址),堆区保存了实际的对象

访问/比较

// 基本类型,以string为例
let a = '[]', b = '[]';
console.log(a === b);  // true
// 引用类型
let c = [], d = [];
console.log(c === d);  // false

基本类型的访问是按值访问的;引用类型是按**引用(地址)**访问的

基本类型比较的是值,所以相同,就为 true;引用类型比较是两个对象堆内存地址是否相同,虽然变量c和变量d都是一个空数组,但是它们的堆内存地址不是一样的,地址指向的不是同一个数组对象,所以不相等。

经常遇到的问题

关于基本类型和引用类型,不管是面试中,还是平常使用中,经常遇到的问题便是克隆(复制),这里又引出另一个概念(深克隆和浅克隆,对于基本类型是没什么影响的)

  • 浅克隆:复制引用类型时,不仅复制,而且还把内存地址也复制了一遍;修改其中一个,另一个会跟着变化
  • 深克隆:复制,内存地址不同;修改其中一个,另一个不会相应的改变

到此这篇关于Javascript中的基本类型和引用类型概述说明的文章就介绍到这了,更多相关JS基本类型与引用类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS+CSS实现仿新浪微博搜索框的方法

    JS+CSS实现仿新浪微博搜索框的方法

    这篇文章主要介绍了JS+CSS实现仿新浪微博搜索框的方法,实例分析了javascript针对搜索框样式的控制技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • javascript 二维数组的实现与应用

    javascript 二维数组的实现与应用

    javascript没有二维数组.所有自定义了一个数组类,下面是实例代码,需要的朋友可以参考下。
    2010-03-03
  • tangram.js库实现js类的方式实例分析

    tangram.js库实现js类的方式实例分析

    这篇文章主要介绍了tangram.js库实现js类的方式,结合实例形式分析了tangram.js库实现类的创建、继承等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • JavaScript eval() 函数介绍及应用示例

    JavaScript eval() 函数介绍及应用示例

    eval(String) 函数可计算某个字符串,并执行其中的的 JavaScript 代码,该方法只接受原始字符串作为参数
    2014-07-07
  • 一步一步教你写淡入淡出带注释的图片轮播插件(一)

    一步一步教你写淡入淡出带注释的图片轮播插件(一)

    抽空写了个类似的效果,做了一定程度的封装,虽然也只能勉强算个轻量级原生小插件吧,但还是分享出来,并做一步一步的教程,希望能给有需要的朋友一些帮助吧。
    2010-10-10
  • js+html5实现侧滑页面效果

    js+html5实现侧滑页面效果

    这篇文章主要为大家详细介绍了js+html5实现侧滑页面效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • javascript 鼠标事件总结

    javascript 鼠标事件总结

    javascript的鼠标事件是个比较庞大的家族。需要的朋友可以参考下。
    2009-12-12
  • 微信小程序实现简单弹框效果

    微信小程序实现简单弹框效果

    这篇文章主要为大家详细介绍了微信小程序实现简单弹框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • javascript特殊文本输入框网页特效

    javascript特殊文本输入框网页特效

    这篇文章主要为大家详细介绍了javascript特殊文本输入框网页特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Javascript数组方法reduce的妙用之处分享

    Javascript数组方法reduce的妙用之处分享

    这篇文章主要给大家介绍了关于Javascript数组方法reduce的妙用之处,文中通过示例代码介绍的非常详细,对大家学习或者使用Javascript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06

最新评论