码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2016-05-18 10:56:04      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:数据类型   基本值   引用值   内存管理   

一.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)引用类型:由多个值构成的对象

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

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


本文出自 “梦想需要坚持” 博客,请务必保留此出处http://xiyin001.blog.51cto.com/9831864/1774627

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

标签:数据类型   基本值   引用值   内存管理   

原文地址:http://xiyin001.blog.51cto.com/9831864/1774627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!