一、基本数据类型

  ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String,也称为基本数据类型,ES6中又增加了一种Symbol。

  基本数据类型是存放在栈(stack)中的简单数据,由stack自动分配内存空间,数据大小确定,他们是直接按值存放的,所以基本数据类型的访问可以直接按值访问,他们会由系统自动释放。任何方法都不能改变基本类型的值,基本类型的比较是值的比较。

  1、undefined类型 ---- 只有一个值,即undefined。当声明的变量未初始化 时,该变量的默认值是undefined; 

    var unType;  //声明变量未赋值
    console.log(unType);  // undefined
    console.log(typeof unType); // undefined
    console.log(unType == undefined); //true
    console.log(unType === undefined); //true

  2、null 类型 ---- 也是只有一个专用值 null,即它的字面量。值undefined实际上是从null派生而来的,因此ECMAScript把它们定义为相等的。
    console.log(null == undefined); // true
    虽然这两个值相等,但它们的含义是不同的,null 用于表示尚未存在的对象,如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

  3、boolean(布尔)类型 ---- 它有两个值 true 和 false(即两个boolean字面量)。

  4、number类型 ---- 既可以表示32位的整数,也可以表示64位的浮点数。

    几个特殊的number值:Number.MAX_VALUE 、Number.MIN_VALUE、Infinity(表示无穷大)、NaN(Not a Number)..........

    具体可学习w3school。

  5、string类型 ---- 字符串类型,是唯一一个没有固定大小的原始类型。

  6、Symbol类型 ---- 表示独一无二的值,通过Symbol函数生成。

二、引用数据类型

  引用数据类型除了上述的基本类型之外就是引用类型了,function、array、object、regex.....(js中出了基本数据类型以外的都是对象)

  引用数据类型是存放在堆(heap)内存中的对象,heap是动态分配的内存,每个空间大小不一样,要根据情况进行特定的配置,也不一定会自动释放。变量保存的是在栈内存中的一个指针(保存的是堆内存中的引用地址),指针指向的是堆内存。在复制引用类型值的时候,其实只复制了指向该内存的地址。引用类型的值是可变的,引用类型的比较是引用的比较,也就是比较两个对象在堆内存中的地址是否相同。
  例1:   

       var object1 = {};

    var object2 = {};
    console.log(object1 == object2); // false
    解析如图:
    
  
例2:

  var a = {name:'Joe',age:18};
  var b = a;
  console.log(b); // { name: 'Joe', age: 18 }
  b.name = "Jack";
  console.log(b.name); // Jack
  console.log(a.name); // Jack
  console.log(a == b); // true
 
       

  学习随笔,如有不周,望请海涵,欢迎小伙伴们各种讨论、指正。

js中的基本类型与引用类型学习的更多相关文章

  1. js中的值类型和引用类型的区别

    1.JavaScript中的变量类型有哪些? (1)值类型(基本类型):字符串(String).数值(Number).布尔值(Boolean).Undefined.Null  (这5种基本数据类型是按 ...

  2. js 中的值类型和引用类型

    javascript中值类型(基本类型):number,string,bool,undefined,null(这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值) 引用类型:对象(Ob ...

  3. 由js apply与call方法想到的js数据类型(原始类型和引用类型)

    原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...

  4. C# 中的值类型和引用类型

    原文 C# 中的值类型和引用类型 值类型(value type):int,long,float,double,decimal,char,bool 和 struct 统称为值类型.值类型变量声明后,不管 ...

  5. C++ : 从栈和堆来理解C#中的值类型和引用类型

    C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的.但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆. 栈(stack)是类似于一个先进后出的抽屉.它的 ...

  6. C#中的值类型和引用类型,深拷贝,浅拷贝

    from https://www.jianshu.com/p/2d27b06e253f 一.C#中的值类型和引用类型 概念 值类型直接存储其值. 引用类型存储对值的引用. 说起来有些拗口,其本质是Va ...

  7. 浅谈C#中的值类型和引用类型

    在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个 ...

  8. 【.Net】浅谈C#中的值类型和引用类型

    在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个 ...

  9. .NET中的值类型与引用类型

    .NET中的值类型与引用类型 这是一个常见面试题,值类型(Value Type)和引用类型(Reference Type)有什么区别?他们性能方面有什么区别? TL;DR(先看结论) 值类型 引用类型 ...

随机推荐

  1. js variable 变量

    局部作用域 由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的: 'use strict'; function foo() { for ( ...

  2. php在线支付流程

    1.企业与银行的两种接入方式: (1).企业直接与银行对接. 优点:直接与银行进行财务结算,资金安全,适合资金流较大企业.         缺点:开发和维护工作量较大,分别与每家银行签订合同,每年需交 ...

  3. PAT 1020 月饼 (25)(精简版代码+思路+推荐测试用例)

    1020 月饼 (25)(25 分)提问 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是 ...

  4. Maven + spring + Mybatis + SpringMVC

    tomcat版本:apache-tomcat-7.0.70 一.新建一个maven的web项目 1.1.请勾选“Create a simple project”,创建一个简单的项目,这里不使用模板.也 ...

  5. [Automation] 自动化测试工具和测试框架大集合

    8 Open Source Test Automation Tools for Desktop Applications written in WinForms/ WPF: Tool Comment ...

  6. 上海第八中学 shader

    http://shiba.hpe.cn/jiaoyanzu/wuli/soft/xna.aspx?classId=4

  7. 使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration

    在连接字符串后面加上?serverTimezone=UTC 其中UTC是统一标准世界时间. 完整的连接字符串示例:jdbc:mysql://localhost:3306/test?serverTime ...

  8. ORACLE 查看分区表分区大小

    SELECT *  FROM dba_segments t WHERE t.segment_name ='table_name'; pratition_name : 分区名 bytes : 分区大小( ...

  9. 判定map中是否存在某元素

    判断某key是否存在可以使用map的count方法来间接判定 count接受一个参数key值,返回map中key值为给定值的元素总数 map<int, string> i_to_s_map ...

  10. 2018.10.20 bzoj1068: [SCOI2007]压缩(区间dp)

    传送门 这题转移很妙啊. f[l][r][1/0]f[l][r][1/0]f[l][r][1/0]表示对于区间[l,r][l,r][l,r]有/无重复的机会时压缩的最小值. 那么可以从三种情况转移过来 ...