zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    大型网站应用中MySQL的架构演变史
    SRM 585 DIV2
    TC 配置插件
    Java中含有静态成员的的初始化顺序
    java 23种设计模式,一般情况下,常用的有哪些? 转载
    Java中的正则表达式
    C++ 中的关于输出的设置于
    C++实现可变参数列表
    Java中的组合与聚合
    pku 2284 That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/onlycare/p/9791826.html
Copyright © 2011-2022 走看看