• js的数据存储机制和数据类型


    数据类型

    基本数据类型 String、Number、Bool、undefined和null
    引用数据类型 Object(Array,Function,RegExp等)

    2种数据类型的存储位置是不同的,基本数据类型存储在栈(stack)中,引用数据类型存储在堆(heap)中。

    栈和堆的区别在于:heap是没有结构的,数据可以任意存放,heap用于为复杂数据类型(引用类型)分配空间,例如数组对象、object对象;stack是有结构的,每个区块按照一定次序存放(后进先出),stack中主要存放一些基本类型的变量和对象的引用,存在栈中的数据大小与生存期必须是确定的。可以明确知道每个区块的大小,因此,stack的寻址速度要快于heap。

    对于引用数据类型,在栈中存储了指针,该指针指向堆中具体的对象。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得对象实体

    数据类型检测

    1. typeof a    检测基本数据类型:String , Number , Bool , Undefined

    注:null的意义是 空对象指针,采用typeof检测会返回 object。

    2. a  Instanceof  Array     检测引用类型,但是仅能判断是否是对象的实例,并不能准确判断究竟是哪种数据类型。
    3. Object.prototype.toString.call(a)      准备判断传入参数的数据类型

    null 与 undefined 的区别

    Null:空对象指针,定义一个 将来 用于 保存对象 的变量,最好将该变量初始化为 null.
    例如 var o = null; 说明o这个变量是要用来保存对象类型的数据的,执行typeof o会返回’object’,那么只要检查null的值就可以判断出该变量是否已经保存了一个对象的引用。在实际开发工作中,经常用到
    例如:if ( goods != null ) { // 对goods对象执行相应操作 }

    Undefined : 使用var声明一个变量但未初始化其值,该变量的值默认取得undefined,使用typeof检测声明但未初始化的变量,返回undefined
    例如 var a; console.log( typeof a ) // undefined

    区别和联系:
    undefined值派生自null值,因此使用不全等操作 undefined == null,返回true;
    二者用途不同,不建议将一个变量显式的设置为undefined,比如var a = undefined,声明但未初始化默认会赋值为undefined;但对于null,只要意在保存对象的变量还没有真正保存为对象,就应该明确的让该变量保存为null值,这体现了null作为空对象指针的意义,且利于区分undefined和null。
    执行undefined === null 返回false,全等’===’操作符的判断,基于typeof检测到的数据类型,而typeof undefined返回undefined,typeof null返回object。

  • 相关阅读:
    aircrack-ng 多网卡启动后环境清理
    Docker create image
    预加载(学习一)
    activity+fragment多次切换出现页面空白问题
    万能的Volley
    关于下拉刷新你是否真的非常理解还是只会搬砖?附 Android 实例子源代码文件下载地址380个合集
    如何将Java源代码文件的编码从GBK转为UTF-8?
    如何操作笔记本显得逼格很高?
    跑马灯源代码
    关于java、Android中Math的一些用法
  • 原文地址:https://www.cnblogs.com/onlycare/p/9791826.html
Copyright © 2020-2023  润新知