美文网首页
js堆栈以及数据类型

js堆栈以及数据类型

作者: _theFeng | 来源:发表于2019-04-25 11:26 被阅读0次

基本数据类型

  • 基本数据类型放在栈中(值不可变,但是可以重新赋值)
var str = "abc";
    str[1]='f'
    console.log(str);   // abc
var str = "abc";
    str = 'f'
    console.log(str);  // f
  • 基本数据类型的'='是传值 开辟新的栈
var a = 10;
var b = a;
a ++ ;
console.log(a); // 11
console.log(b); // 10
  • 基本类型比较是值的比较
   var a = 1;
   var b = 1;
   console.log(a === b);//true

引用类型(对象,数组,函数,等)

  • 引用类型放到堆中(值可以变)
    var a = [1,2,3];
    a[1] = 5;
    console.log(a[1]); // 5

-引用类型的比较是引用的比较(堆的空间)

    var a = [1,2,3];
    var b = [1,2,3];
    console.log(a === b); // false
  • 引用类型的'='是传址(共同使用同一块堆中的地址)
var a = {}; // a保存了一个空对象的实例
var b = a;  // a和b都指向了这个空对象

a.name = 'jozo';
console.log(a.name); // 'jozo'
console.log(b.name); // 'jozo'

b.age = 22;
console.log(b.age);// 22
console.log(a.age);// 22

console.log(a == b);// true

'='是引用和浅拷贝的区别

  • 浅拷贝 也创建一个新对象 开辟了堆的空间 只复制一层对象的属性,并不包括对象里面的为引用类型的数据
    var obj1 = {
        'name' : 'zhangsan',
        'age' :  '18',
        'language' : [1,[2,3],[4,5]],
    };

    var obj2 = obj1;


    var obj3 = shallowCopy(obj1);
    function shallowCopy(src) {
        var dst = {};
        for (var prop in src) {
            if (src.hasOwnProperty(prop)) {
                dst[prop] = src[prop];
            }
        }
        return dst;
    }

    obj2.name = "lisi";
    obj3.age = "20";

    obj2.language[1] = ["二","三"];
    obj3.language[2] = ["四","五"];

    console.log(obj1);  
    //obj1 = {
    //    'name' : 'lisi',
    //    'age' :  '18',
    //    'language' : [1,["二","三"],["四","五"]],
    //};

    console.log(obj2);
    //obj2 = {
    //    'name' : 'lisi',
    //    'age' :  '18',
    //    'language' : [1,["二","三"],["四","五"]],
    //};

    console.log(obj3);
    //obj3 = {
    //    'name' : 'zhangsan',
    //    'age' :  '20',
    //    'language' : [1,["二","三"],["四","五"]],
    //};
  • 深拷贝 是对对象以及对象的所有子对象进行拷贝 完全独立出来把所有全部拷贝出来。
  1. JSON.parse(JSON.stringify()) new Date()将变成字符串,正则将变成空对象

const obj = {
    arr: [111, 222],
    obj: {key: '对象'},
    a: () => {console.log('函数')},
    date: new Date(),
    reg: /正则/ig
}
image.png
  1. for in 和递归的方法 无法拷贝函数,date,reg类型的对象;

function isObj(obj) {
    return (typeof obj === 'object' || typeof obj === 'function') && obj !== null
}
function deepCopy(obj) {
    let tempObj = Array.isArray(obj) ? [] : {}
    for(let key in obj) {
        tempObj[key] = isObj(obj[key]) ? deepCopy(obj[key]) : obj[key]
    }
    return tempObj
}

未完待续 深拷贝的方法和坑

相关文章

  • 前端线路图

    1 堆栈内存以及闭包作用域 1 js中的基本数据类型以及其区别 (8种) 2 js堆栈内存的运行机制 3 变量提升...

  • js堆栈以及数据类型

    基本数据类型 基本数据类型放在栈中(值不可变,但是可以重新赋值) 基本数据类型的'='是传值 开辟新的栈 基本类型...

  • Js/1 堆栈内存/变量提升和闭包

    1# Js数据类型渲染机制和堆栈内存 Js 文件的放置位置 head 头部 body 底部(推荐) Js 的 ...

  • 浅聊js运行机制

    // 浅聊js的运行机制(堆栈内存和不同的数据类型的操作方式) var a = 12; var b = a; b ...

  • js的浅拷贝与深拷贝

    js的浅拷贝与深拷贝 涉及知识点: js中的数据类型(基本类型,引用类型) js中的存储数据的堆栈相关知识点; 下...

  • 简单数据类型和复杂数据类型

    1 - 简单数据类型和复杂数据类型 1.1 简单数据类型 1.2 复杂数据类型 1.3 堆栈 堆栈空间分配区别: ...

  • js知识版图-数据类型

    一、js中内存分为栈内存、堆内存此处引申知识点:js中堆栈内存及函数处理机制 栈内存 从数据类型角度思考 栈内存 ...

  • JavaScript的堆栈以及数据类型

    本文参考此链接[https://www.jianshu.com/p/5e0e8d183102] 堆 是堆内存的简称...

  • JS的一些面试点

    JS 数据类型 JavaScript中什么是基本数据类型什么是引用数据类型?以及各个数据类型是如何存储的? 基本数...

  • JS中的堆栈问题以及影响

    堆(heap) 堆 是堆内存的简称。一个混沌,杂乱无章,方便存储和开辟内存空间。 栈(stack) 栈 是栈内存的...

网友评论

      本文标题:js堆栈以及数据类型

      本文链接:https://www.haomeiwen.com/subject/rgjagqtx.html