27 JavaScript数据类型与内存管理

JavaScript共有7种数据类型:

  • number
  • string
  • boolean
  • null
  • undefined
  • obj
  • Symbol

前5种存在栈中,栈中变量名存储的是值,object存在堆中(对象数值类型也存储在堆中),栈中变量名存储的是堆中的地址

obj1 = obj;

obj1拿到的是obj的地址,不是地址中的值,相当于拿到的是一把钥匙,而不是箱子里的内容.假设这个地址是#aaaaaa,那么开启这把箱子的钥匙就有两把,分别是obj和obj1,任何一把都能改变箱子里的内容,箱子里的内容一旦改变,那么任何一把钥匙在此后打开箱子后拿到的都是改变后的值

此时obj对象的属性改变,obj1读到的值也改变

。。。

综上,可以得出以下三点:

不论是对象还是前5原始数据类型,它们的变量名都存储在栈中

前5种基本数据类型的变量名在栈中存储的是值,但是它们的方法是通过相应的对象数据类型调用的,所以存取是栈调用,调用方法是堆调用,即对象调用

对象存储在堆中,栈中存储的对象变量名存储的是堆中的地址,对象改变,是堆中的属性改变,但是地址并不改变

原文地址:https://www.cnblogs.com/ltfxy/p/12100121.html

时间: 2024-10-18 02:51:14

27 JavaScript数据类型与内存管理的相关文章

JavaScript 之垃圾回收和内存管理

JavaScript 具有自动垃圾收集机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存.而在 C 和 C++ 之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源. 在编写 JavaScript 程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理.这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间

JAVA内存管理再解

首先我们要明白一点,我们所使用的变量就是一块一块的内存空间!! 一.内存管理原理:   在java中,有java程序.虚拟机.操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统间交互!这就保证了java程序的平台无关性!下面我们从程序运行前,程序运行中.程序运行内存溢出三个阶段来说一下内存管理原理! 1.程序运行前:JVM向操作系统请求一定的内存空间,称为初始内存空间!程序执行过程中所需的内存都是由java虚拟机从这片内存空间中划分的. 2.程序运行中:java程序一直向java

OC -内存管理

管理内存有三种方式 1:垃圾回收,在java中常见的管理内存方法,系统自动检测对象是否被使用,是否被释放 2.MRC: 手动管理引用计数,iOS管理内存的方式,程序员通过手动方式来管理对象是否被释放 3.ARC: 自动管理引用计数:基于MRC,系统自动的管理内存 引用计数:retainCount 当我们使用一个指针指向一块内存的时候,应该对这块内存做retain操作,引用计数+1.当我们不再使用这个指针指向这块内存,应该对这块内存做release操作,引用计数-1.这样可以使引用计数值一直保持等

oc内存管理总结(一)

**内存管理 问题 1.什么是ios内存管理? 就是在对象不再被使用的时候,把它即时的从内存中清除掉 2.为什么要使用内存管理? 1.严格的内存管理,能够是我们的应用程在性能上有很大的提高 2.如果忽略内存管理,可能导致应用占用内存过高,导致程序崩溃 3.系统判断一个对象是否要被销毁的依据是什么? 每个对象创建出来的时候,都有一个retainCount属性,默认值是1,当retainCount = 0的时候,系统就会将该对像销毁 4.如何使对象的retainCount 值增加? 调用retain

JavaScript也谈内存优化

相对C/C++ 而言,我们所用的JavaScript 在内存这一方面的处理已经让我们在开发中更注重业务逻辑的编写.但是随着业务的不断复杂化,单页面应用.移动HTML5 应用和Node.js 程序等等的发展,JavaScript 中的内存问题所导致的卡顿.内存溢出等现象也变得不再陌生. 这篇文章将从JavaScript 的语言层面进行内存的使用和优化的探讨.从大家熟悉或略有耳闻的方面,到大家大多数时候不会注意到的地方,我们一一进行剖析. 1. 语言层面的内存管理 1.1 作用域 作用域(scope

C#内存管理解析

前言:对于很多的C#程序员来说,经常会很少去关注其内存的释放,他们认为C#带有强大的垃圾回收机制,所有不愿意去考虑这方面的事情,其实不尽然,很多时候我们都需要考虑C#内存的管理问题,否则会很容易造成内存的泄露问题. 尽管.NET运行库负责处理大部分内存管理工作,但C#程序员仍然必须理解内存管理的工作原理,了解如何高效地处理非托管的资源,才能在非常注重性能的系统中高效地处理内存.C#编程的一个优点就是程序员不必担心具体的内存管理,垃圾回收器会自动处理所有的内存清理工作.用户可以得到近乎像C++语言

解析C#内存管理

C#内存管理解析 前言:对于很多的C#程序员来说,经常会很少去关注其内存的释放,他们认为C#带有强大的垃圾回收机制,所有不愿意去考虑这方面的事情,其实不尽然,很多时候我们都需要考虑C#内存的管理问题,否则会很容易造成内存的泄露问题. 尽管.NET运行库负责处理大部分内存管理工作,但C#程序员仍然必须理解内存管理的工作原理,了解如何高效地处理非托管的资源,才能在非常注重性能的系统中高效地处理内存.C#编程的一个优点就是程序员不必担心具体的内存管理,垃圾回收器会自动处理所有的内存清理工作.用户可以得

javascript 变量,作用域,内存管理小结

js的变量保存两种类型的数据——基本数据类型与引用类型.具有以下几点特征:   变量: 1)基本类型值在内存中占固定大小的空间,因此被保存在栈内存中; 2) 把保存基本类型值得变量赋给另一个变量,会创建这个值的副本; 3) 引用类型的值是对象,存在堆内存中; 4) 变量不会保存对象,只是创建了新的指针指向该对象,对象始终在堆内存中; 5) 指向对象的变量复制给一个新的变量,只是复制了指向对象的指针,最后两个变量都指向该对象; 6)  查看变量属于哪种基本类型得用typeof操作符,查看变量是哪种

javascript内存管理

简介 JavaScript 在变量(对象,字符串等等)创建时分配内存,然后在它们不再使用时“自动”释放.后者被称为垃圾回收.“自动”这个词容易让人混淆,或者说迷惑,并给JavaScript(和其他高级语言)开发者一个印象:他们可以不用考虑内存管理.然而这是错误的. 内存生命周期 不管什么程序语言,内存生命周期基本是一致的: 分配你所需要的内存 使用分配到的内存(读.写) 不需要时将其释放\归还 在所有语言中第一和第二部分都很清晰.最后一步在低级语言中很清晰,但是在像JavaScript 等高级语