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

  • 相关阅读:
    Symbol
    前端微信支付步骤
    获取url参数值(可解码中文值)
    HTML5--canvas与svg的使用
    js-图片img转base64格式
    echarts 地图
    echarts 水球图
    react长列表性能优化
    CSS Modules
    react路由
  • 原文地址:https://www.cnblogs.com/victory820/p/6876865.html
Copyright © 2020-2023  润新知