JavaScript两种数据类型的存储方式

JavaScript中数据类型的存储

区别:

两种类型的区别是:存储位置不同

基本数据类型

原始数据类型是直接存储在栈(stack)中的简单数据段。因为占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。

引用数据类型

引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能。

JavaScript中的引用数据类型有:

Array

Object

引用数据类型是保存在堆内存中的,然后再栈内存中保存一个对堆内存中实际对象的引用(栈内存中保存了一个地址)。所以,JavaScript中对引用数据类型的操作都是操作对象的引用而不是实际的对象。 (这种说法不严密,当复制保存着对象的某个标量时,操作的是对象的引用。但在为对象添加属性时,操作的是实际的对象。)

复制变量值

除了保存的方式不同之外,在从一个变量像另一个变量复制基本类型值和引用类型值是时,也存在不同。

基本数据类型

对于基本类型值,如果进行复制,会为新的变量在栈内存中分配一个新值。

引用数据类型

对于对象、数组这样的引用数据类型,如果进行复制,会为新的变量在栈内存中分配一个新值,但是这个值仅仅是一个地址。也就是说,复制出来的变量和原有的变量具有相同的地址,指向堆内存中的同一个对象。

为什么基础数据类型存在栈中,而引用数据类型存在堆中呢?

1.堆比栈空间大,栈比堆运行速度快。

2.堆内存是无序存储,可以根据引用直接获取。

3.基础数据类型比较稳定,而且相对来说占用的内存小。

4.引用数据类型大小是动态的,而且是无限的。

原文地址:https://www.cnblogs.com/wzp-monkey/p/9900637.html

时间: 2024-10-29 04:47:53

JavaScript两种数据类型的存储方式的相关文章

HTML5的两种简单的存储方式

1.Application Cache HTML5引入应用缓存,意味着web应用可以进行缓存,即使在没有网络的情况下也能使用. application cache有三个特点 离线浏览 已缓存的资源加载速度更快 减少服务器负载,浏览器将只从服务器下载更新过或更改过的资源 使用方法就是在 html标签中添加一个manifest属性 每个指定了 manifest 的页面在用户对其访问时都会被缓存.如果未指定 manifest 属性,则页面不会被缓存(除非在 manifest 文件中直接指定了该页面).

javascript两种声明函数的方式的一次深入解析

声明函数的方式 javascript有两种声明函数的方式,一个是函数表达式定义函数,也就是我们说的匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /*方式二*/ function FUNCTION_NAME () { /* FUNCTION_BODY */}; 区别一 方式一的声明方式是先声明后使用 方式二的声明方式可以先调用,后声明 /*方式一: *先声明后使用 *

从计算机中数据类型的存储方式,思考理解原码,反码,补码

从计算机中数据类型的存储方式,思考理解原码,反码,补码 1. 数据类型 首先,我们知道,在C中,设计了两个类型的数据: 有符号数据类型 无符号数据类型 ==== signed & unsigned 打印方式: signed: %d, unsigned: %u 数据范围: signed: [-128, 127] unsigned: [0, 255] 2. 无符号数据类型 - 原码,反码,补码 在学习计算机的过程中,很快出现了:原码,反码,补码的概念.这里你肯定不会理解为什么要设计这个玩意儿的! 因

ajax有两种提交数据的方式,分别为get和post(转)

ajax有两种提交数据的方式,分别为get和post.post方法可传输大于2K的数据,在Ajax里的应用不同之处在于:"post方法的请求地址与传输的数据是放在两个对象里—-请求地址放在open对象里,传输的数据放在send对象里:并且在传输数据之前定义一个传输文件HTTP头信息(setRequestHeader)" 以下为引用的内容: <SCRIPT LANGUAGE="javascript"> function saveUserInfo(){ //

两种访问接口的方式(get和post)

跨机器.跨语言的远程访问形式一共有三种:scoket发送数据包.http发送请求.rmi远程连接: http发送请求方式:分为post和get两种方式 importjava.io.IOException; importjava.io.InputStream; import java.util.Map; importjava.util.concurrent.atomic.AtomicInteger; importorg.apache.commons.httpclient.HttpClient; i

Adnroid 两种下拉刷新 方式的实现 sina刷新 gmail刷新

sina刷新 这种下拉刷新的方式是比较简单的.上个图: 这种刷新方式的思路是这样的: 首先是需要一个HeaderVIew也就是刷新时头部所显示出来的数据.这个view的布局随你,长啥样自己定夺. 其他不是特别重要,重要的是用户触摸事件的捕捉,看到github上的大神的一些方法是比较正规的,我就自己用自己的方法尝试,主要是捕捉到用户的点击事件来计算用户所触摸到的位置然后来更新头部布局的位置. 这个重要的代码贴出来: case MotionEvent.ACTION_MOVE: currentY =

javascript两种定时器的使用及其清除

<!--示例代码如下:--><!DOCTYPE html> <html> <body> <p>A script on this page starts this clock:</p> <p id="demo"></p> <input type="button" value="停止" onclick="abc()"/> &

GUID和INT两种数据类型做主键的比较

转自http://www.cnblogs.com/zhuqil/archive/2010/12/02/1894575.html 我们公司的数据库全部是使用GUID做主键的,很多人习惯使用int做主键.所以呢,这里总结一下,将两种数据类型做主键进行一个比较. 使用INT做主键的优点: 1.需要很小的数据存储空间,仅仅需要4 byte . 2.insert和update操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能. 3.index和Join 操作,int的性能最好. 4.

两种停止Thread的方式

当你想要依据某些条件终结thread的时候,有两种最常见的方式. 设定标记 最常见停止thread的方式是设定某些标记来表示该thread应该要停止了.thread可以周期性地查询标记以判别它是否应该退出.如例: package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main {     public stati