zoukankan      html  css  js  c++  java
  • js基本数据类型和引用类型的区别详解-笔记

    原文参考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与值得关联,在垃圾收集器回收时候,自动回收。因为自动执行了这一步所以基本数据类型无法添加属性和方法。只有基本包装类型才会有这一步。

  • 相关阅读:
    成功并不是要得到什么,而是要放弃什么
    Qt一步一步实现插件通信(附源码)
    Qt一步一步实现插件调用(附源码)
    推荐大家阅读——《你的知识需要管理》
    移动商机十人谈__移动红利
    如果再不要求进步,那么你就是下一个陨落的巨头
    贫穷的本质__如何改变穷人的现状?
    贫穷的本质__缺乏对未来的信心和长远规划
    痛苦并愉快的被洗着_品牌洗脑
    Qt_Pro详解
  • 原文地址:https://www.cnblogs.com/victory820/p/6876865.html
Copyright © 2011-2022 走看看