js数据类型,及内存存储学习笔记

一.Javascript的数据类型

(1)基本类型:

undefined :指的是,使用var声明变量但未对其加以初始化, var meddling,对未初始化的变量执行typeof操作符会返回undefined,而对未声明的变量执行typeof操作符同样也会返回undefined

null  :typeof操作符会返回object,只要保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值。

Boolean:该类型有俩个字面值:true ,false 大小写区分

Number :有一个NaN,非数值,是一个特殊的数值 ,这个值用于表示一个本来要返回数值的操作数而未返回数值的情况(这样就不会抛出错误了)NaN的特点:任何涉及它的操作都会返回NaN;NaN与任何值都不相等(包括自身自己NaN)。

String

(2)引用类型:由多个值构成的对象

Object:object的每个实例都具有下列属性和方法:

constructor:保存着用于创建当前对象的函数;

hasOwnProperty(“propertyName”):用于检查给定的属性在当前实例(而不是在实例的原型中)是否存在。

isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型

toString():返回对象的字符串表示

valueOf():返回对象的字符串,数值或布尔值表示

二.Js中对象的存储问题:

两中类型的特点:

(1)基本类型在内存中占据固定大小的空间,因此被保存在栈内存中。

(2)从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本

(3)引用类型的值是对像,保存在堆内存中,引用类型的值是引用访问的

(4)包含引用类型的值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针

(5)从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。

(6)用typeof操作符来确定是哪种基本类型,typeof是一个操作符,而不是一个函数,因此typeof后面的圆括号可有可无,用instanceof操作符来确定是哪种引用类型。

栈的优势就是存取速度比堆要快,仅次于直接位于CPU中的寄存器,但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,垃圾收集器会自动地收走这些不再使用的数据,但是缺点是由于在运行时动态分配内存,所以存取速度较慢。

而对于js简单数据类型而言,他们占用内存比较小,如果放在堆中,查找会浪费很多时间,而把堆中的数据放入栈中也会影响栈的效率。比如对象和数组是可以无限拓展的,正好放在可以动态分配大小的堆中。

三.  Js中内存管理:

主要问题是:分配给web浏览器的可用内存数量通常要比分配给桌面应用程序的少,目的是防止运行js的网页耗尽全部系统内存而导致系统崩溃。

Js是一门具有自动垃圾收集机制的编程语言。

Js的垃圾回收机制内容:

(1)离开作用域的值将被自动标记为可以回收,(比如局部变量,在运行完之后,就被自动标记,闭包的时候,属于特殊情况),因此将在垃圾收集期间被删除。

(2)“标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不适用的值加上标记,然后在回收其内存。一般这些都是用在全局变量上。

(3)“引用计数”,另一种垃圾收集算法,这种算法的思想是,跟踪记录所有值被引用的次数,该算法在当前的搜索引擎中都不在使用

时间: 2024-07-30 05:40:24

js数据类型,及内存存储学习笔记的相关文章

C++内存管理学习笔记(6)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9120635 /************************

Linux内存管理学习笔记——内存寻址

最近开始想稍微深入一点地学习Linux内核,主要参考内容是<深入理解Linux内核>和<深入理解Linux内核架构>以及源码,经验有限,只能分析出有限的内容,看完这遍以后再更深入学习吧. 1,内存地址 逻辑地址:包含在机器语言中用来指定一个操作数或一条指令的地址. 线性地址:一个32位无符号数,用于直接映射物理地址 物理地址:片上引脚寻址级别的地址 2,逻辑地址->线性地址 2.1 段选择符与段寄存器 逻辑地址:段选择符(16位)+段内偏移(32位) index:在GDT或L

C++内存管理学习笔记(5)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9112123 /************************

node.js在windows下的学习笔记(2)---简单熟悉一些命令

1.打开如下的安装 2.输入node -v,显示node的版本号 3.输入node --help.显示帮助命令 4.自己用一个文本编辑器编写一下代码,保存为text.js,然后在控制台输入node.exe  text.js的路径(直接把这个js文件拖到控制台自动显示路径),按下回车键 var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {&

node.js在windows下的学习笔记(1)---安装node.js

1.首先打开http://www.nodejs.org/ 2.选择DOWNLOADS,跳转到下面的画面,我的系统是windows7的32位.所以选择.msi的32bit版本. 3.下载后,得到一个5.43MB大小的安装包, 4.运行安装包 点击next 打个勾,点击next 选择安装目录 最后,安装成功啦 node.js在windows下的学习笔记(1)---安装node.js,布布扣,bubuko.com

js的call(obj,arg)学习笔记

var add=function (a,b){ return(a+b); } var sub=function (a,b,c){ return(a-b-c); } sub.call(add,1,2,3) //示例的意思时指用sub对象来替换add对象,并传入参数 //使用call来实现继承 function class1(){ this.name="lee"; this.say=function(){ console.log(this.name); } } function class

C++内存管理学习笔记(7)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9178099 /************************

初探C++内存泄漏学习笔记

为什么要避免内存泄露呢? 分配一块内存,但是忘了释放它,这是一种很严重的错误.这样的内存将等到程序结束之后才会被释放. 如果程序运行的时间很长,并且在不断申请内存而没有释放内存,迟早会把内存消耗殆尽,导致后面无法申请内存甚 至系统奔溃. 常见的内存泄漏的几种情况 new语句所返回的地址是访问这个内存块的唯一线索,同时也是delete语句把这个内存块还给系统的唯一线索. int *x; x = new int[100]; //x是唯一线索 delete [] x; x=NULL; 如果这块内存的地

C++内存管理学习笔记(3)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9078965 /************************