原文参考http://mp.weixin.qq.com/s/apFyUgqT5N-bsDUjP4Eryg

笔记总结

首先记住js中的基础数据类型
undefined,null,boolean,string,number

1基本数据类型
一基本数据类型的值是不可变的
var name = 'hello';
name.substr(2);// 此处sunstr方法返回新的字符串
console.log(name);// ‘hello’

var name = 'hello2';
name = 'world'
console.log(name);// 输出'world',可以理解现在栈中新有一块地址存储的是world,但是它的标识符是name,现在name代表的是world了。

二基本数据类型不可以添加属性和方法

三基本数据类型是简单赋值
var a = 10;
var b = a;// 这里理解是把10给了b
b = 15;
console.log(a);// 10
console.log(b);// 15
a和b有各自的存储空间

四基本数据类型是值比较
var a = '{}';
var b = '{}';
console.log(a == b);// 这里是字符串的比较,所以返回是true

五基本数据类型存放在栈中。
栈里存放的是一个字典
左侧是Key(变量名)右侧是value(真正的值)

2引用类型
一值是可以改变的
var o = {x:1};
o.x = 2;// console.log(o.x)已经变为2

二可以添加属性和方法
var obj = {};
obj.name='zs';
obj.getName=function(){console.log(obj.name)}

三引用类型赋值的是对象引用
var a = {};
var b = a;// b在栈中新建了一个地址,指向了a在堆中存储的数据
a.name = 'change';// a的更改会影响b的数值
console.log(a.name);// change
console.log(b.name);// change

四引用类型比较的是引用地址
var a = {};
var b = {};
console.log(a == b);// 在内存中地址是动态分配的,这里返回false

五引用类型数据会保存在栈和堆中
var a = {name:'zs'}
栈中保存的是a和一个分配的地址
堆中保存的是{name:'zs'}

基本包装类型即Number,Boolean,String(首字母大写,现在看成是一个类型)
js本身自带的。
var str1 = 'hello';
实际在js内部执行了下面操作:
var str1 = new String('hello');
var str2 = str1.substr(2);
str1 = null;// 这里就释放了str1与值得关联,在垃圾收集器回收时候,自动回收。因为自动执行了这一步所以基本数据类型无法添加属性和方法。只有基本包装类型才会有这一步。

js基本数据类型和引用类型的区别详解-笔记的更多相关文章

  1. JavaScript 基本数据类型和引用类型的区别详解

    js基本数据类型: js基本数据类型包括:undefined,null,number,boolean,string.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值 1. 基本数据类 ...

  2. mysql数据类型double和decimal区别详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt336 实数是带有小数部分的数字.然而,它们不只是为了存储小数部分,也可以使用 ...

  3. JQ的offset().top与js的offsetTop区别详解

    一.前言 最近在做一个图片懒加载的插件,就纵轴(Y轴)而言,我需要时时获取图片的上偏移量,好判断是否已进入视图区域,而我所理解的是offsetTop应该是跟offset().top一样的,然后陷入了因 ...

  4. js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题

    js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...

  5. 检索01-c#中基本数据类型和引用类型的区别

    1.基本定义 基本数据类型包括:整型.浮点型.字符型.结构体.布尔型.日期时间.枚举类型等 引用类型包括:字符串.类.数组.接口等 堆定义:是一种特殊的树形数据结构,每个结点都有一个值,一般由程序员分 ...

  6. JQ的offset().top与JS的getBoundingClientRect区别详解,JS获取元素距离视窗顶部可变距离

     壹 ❀ 引 我在 JQ的offset().top与js的offsetTop区别详解 这篇博客中详细分析了JQ方法offset().top与JS属性offsetTop的区别,并得出了一条offset( ...

  7. GoLang基础数据类型--->字典(map)详解

    GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...

  8. HTTP POST GET 本质区别详解

    HTTP POST GET 本质区别详解 一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交 Ht ...

  9. javascript中=、==、===区别详解

    javascript中=.==.===区别详解今天在项目开发过中发现在一个小问题.在判断n==""结果当n=0时 n==""结果也返回了true.虽然是个小问题 ...

随机推荐

  1. js 鼠标拖拽效果实现

    效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. [转载] 第三篇:数据仓库系统的实现与使用(含OLAP重点讲解)

    阅读目录 前言 创建数据仓库 ETL:抽取.转换.加载 OLAP/BI工具 数据立方体(Data Cube) OLAP的架构模式 小结 回到顶部 前言 上一篇重点讲解了数据仓库建模,它是数据仓库开发中 ...

  3. c++ 用 0x3f3f3f3f 设定最大int值的优点

    在许多算法中都要用到一个常量来表示最大值,例如:寻找一个最小数,就要先设定一个值a,如果比a小,a就等于这个数:再如,最短路径中基本的松弛操作: 0 在c++中可以用memset() 来初始化数组成最 ...

  4. 错误及异常处理-[PathTooLongException]指定的路径或文件名太长

    错误信息 System.IO.PathTooLongException:"指定的路径或文件名太长,或者两者都太长.完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符. ...

  5. 使用try-with-resource遇到的问题

    JDK1.7增加了try-with-source语法.在try中声明一个或者多个资源,在try块代码执行完成后自动关闭流,不用再写close()进行手动关闭. try(Resource res = x ...

  6. saltstack源码详解一

    目录 初识源码流程 入口 1.grains.items 2.pillar.items 2/3: 是否可以用python脚本实现 总结pillar源码分析: @(python之路)[saltstack源 ...

  7. 初学SSM遇到的BUG

    一.SpringMVC部分 1.参数绑定 1.1简单类型绑定 参数类型推荐使用包装数据类型,因为基础数据类型不可以为null 整形:Integer.int 字符串:String 单精度:Float.f ...

  8. C语言实现全排列和回溯法总结

    一.递归实现全排列 #include"cstdio" ]; void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i ...

  9. fastclick源码分析

    https://www.cnblogs.com/diver-blogs/p/5657323.html  地址 fastclick.js源码解读分析 阅读优秀的js插件和库源码,可以加深我们对web开发 ...

  10. java中Map转化为bean

    Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值,在java编程中会经常用到.但是当我们进行业务逻辑的处理或着操作数据库时,往往应用的是我们自己定义的的Bean或VO来传递和 ...