资讯专栏INFORMATION COLUMN

Javascript中的基础类型与引用类型

loonggg / 264人阅读

摘要:两种类型基本类型值引用类型值基本类型值指的是保存在栈内存中的简单数据段引用类型值指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象两种访问方式基本类型值按值访问,操作的是

两种类型:基本类型值、引用类型值

基本类型值:指的是保存在栈内存中的简单数据段;
引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象;

两种访问方式:

基本类型值:按值访问,操作的是他们实际保存的值;
引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;引用类型的值保存在内存中,由于js不允许直接访问内存,在操作的时候,其实操作的是对象的引用

两种数据类型:

基本类型:undefined、null、Boolean、String、Number
引用类型:Function、Object、Array

两种类型复制

基本类型变量的复制:从一个变量向另一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上;

引用类型变量的复制:复制的是存储在栈的指针,将指针复制到为新变量分配的位置上,而这个指针副本与原指针执行的是存储在堆中的对象。复制结束后,两个变量指向的是同一个对象,因此操作其中的任何一个将会影响另一个;

两种变量类型检测

typeof操作符是检测基本类型的最佳工具

如果变量值是null或者对象,返回的是object

typeof null                 // "object"
typeof undefined            // "undefined"
typeof 1                    // "number"
typeof "1"                  // "string"
typeof true                 // "boolean"
typeof {}                   // "object"
typeof []                   // "object"
typeof function() {}        // "function"

instanceof操作符用于检测引用类型,可以检测它到底是什么类型的实例

如果变量是给定引用类型的实例,instanceof将会返回true

console.log(objects instanceof Object)        // objects是否是Object的实例
console.log(arrays instanceof  Array)         // arrays是否是Array的实例
两种变量类型传递(值传递、引用类型传递)

通过以下两个例子解释值传递与引用类型传递:

var a = 1;
function add(b) {
    b += 1;
}

add(a);
console.log(a);        // a == 1,a的值没有发生变化

值传递的特性:

1.只将值进行传递,与原变量无关,值会被复制一份,保存在内存中另一个不同的位置;
2.当我们修改传递后的值时,修改的是内存中新的位置,而原变量不会被影响,还是原来的值;
3.这种情况往往出现在基本类型变量中;

var a = [1];
function add(b) {
    b.push(2);
}

add(a);
console.log(a);            // [1,2] 说明原始的a的值已经被改变了

引用传递的特性:

1.将内存地址进行传递,相当于把原变量完整的传递过来;
2.当我们修改传递后的值时,修改的是内存中原来的位置,会对原变量造成影响;
3.这种情况往往出现在对象中;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81686.html

相关文章

  • 前端基础进阶(一):内存空间详细图解

    摘要:一栈数据结构与不同,中并没有严格意义上区分栈内存与堆内存。引用数据类型的值是保存在堆内存中的对象。不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。为了更好的搞懂变量对象与堆内存,我们可以结合以下例子与图解进行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 评论0 收藏0
  • JavaScript学习总结(一)基础部分

    摘要:前缀规范每个局部变量都需要有一个类型前缀,按照类型可以分为表示字符串。例如,表示以上未涉及到的其他对象,例如,表示全局变量,例如,是一种区分大小写的语言。布尔值与字符串相加将布尔值强制转换为字符串。 基本概念 javascript是一门解释型的语言,浏览器充当解释器。js执行时,在同一个作用域内是先解释再执行。解释的时候会编译function和var这两个关键词定义的变量,编译完成后从...

    AlanKeene 评论0 收藏0
  • JavaScript基础系列---变量及其值类型

    摘要:但对于引用类型的数据主要是对象和数组,变量指向的内存地址,保存的只是一个引用地址指针,只能保证这个引用地址指针是固定的,至于它指向的堆内存中的存储的值是不是可变的,就完全不能控制了。 基础概念 变量是存储信息的容器,这里需要区分一下:变量不是指存储的信息本身,而是指这个用于存储信息的容器,可以把变量想象成一个个用来装东西的纸箱子 变量需要声明,并且建议在声明的同时进行初始化,如下所...

    sugarmo 评论0 收藏0
  • JavaScript学习笔记 - 变量、作用域内存问题

    摘要:语句中的块语句对来说,将会指定对象添加到作用域链中。在严格模式下,初始化未经声明的变量会导致错误。查询标识符搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符。 本文记录了我在学习前端上的笔记,方便以后的复习和巩固。 4.1基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型指的是简单的数据段,而引用类型值指那些可...

    lavnFan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<