百度的合作网站有哪些,html5 网站建设,discuz整合wordpress,网站该如何做ES6 引入了一种新的原始数据类型 Symbol#xff0c;表示独一无二的值。它是 JavaScript 语言的第七种数据类型#xff0c;前六种是#xff1a;Undefined、Null、布尔值#xff08;Boolean#xff09;、字符串#xff08;String#xff09;、数值#xff08;Number…ES6 引入了一种新的原始数据类型 Symbol表示独一无二的值。它是 JavaScript 语言的第七种数据类型前六种是Undefined、Null、布尔值Boolean、字符串String、数值Number、对象Object。 
JS基本数据类型Undefined、Null、Boolean、Number、String、Symbol (new in ES6) 
JS引用类型统称为 Object 类型。细分的话有Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型 等 
基本类型的变量是存放在栈内存Stack里的栈内存中包括了变量的标识符和变量的值 因为原始类型占据的空间是固定的所以可将他们存储在较小的内存区域 - 栈中。这样存储便于迅速查询变量的值。 
引用类型的值是保存在堆内存Heap中的对象Object 
【栈内存中保存了变量标识符和指向堆内存中该对象的指针】 【堆内存中保存了对象的内容】 
因为引用值的大小会改变所以不能把它放在栈中否则会降低变量查询的速度。 放在栈空间中的值是该对象存储在栈中的地址地址的大小是固定的所以把它存储在栈中。 
JavaScript 不能直接操作对象的内存空间堆内存 
var a  {name:percy};
var b;
b  a;
a.name  zyj;
console.log(b.name);    // zyj
b.age  22;
console.log(a.age);     // 22
var c  {name: zyj,age: 22
};“a赋值给b”是这个堆内存对象在栈内存的引用地址复制了一份给b但实际上它们指向了同一个堆内存对象。 
引用类型的比较是引用的比较 
var obj1  {};    // 新建一个空对象 obj1
var obj2  {};    // 新建一个空对象 obj2
console.log(obj1  obj2);    // false
console.log(obj1  obj2);   // false因为 obj1 和 obj2 分别引用的是存放在堆内存中的2个不同的对象故变量 obj1 和 obj2 的值引用地址也是不一样的 
总结区别 
1. 声明变量时不同的内存分配 1原始值存储在栈stack中的简单数据段。 2引用值储存在堆heap中的对象。所以如果console一个临时存储的引用数据会调用堆内存对象本该用完销毁的因为console调用不会销毁 
2. 不同的内存分配机制也带来了不同的访问机制 1在JavaScript中是不允许直接访问保存在堆内存中的对象的所以在访问一个对象时首先得到的是这个对象在堆内存的地址然后再按照这个地址去获取这个对象中的值这就是 按引用访问。 2而原始(基本)类型的值则是可以直接访问的。 
3. 复制变量时的不同 1原始值在将一个保存着原始值的变量复制给另一个变量时会将原始值的副本赋值给新变量此后这两个变量是完全独立的他们只是拥有相同的value而已。 2引用值在将一个保存着原始值的变量赋值给另一个变量时会把这个内存地址赋值给新变量。也就是说这两个变量都指向了内存中的同一对象它们中任何一个做出的改变都会反映到另一个身上。这里要理解一点的就是复制对象时并不会在堆内存中新生成一个一模一样的对象只是对了一个保存指向这个对象指针的变量而已。 
4. 参数传递的不同把实参复制给形参的过程 1原始值只是把变量里的值传递给参数之后参数和这个变量互不影响。 2引用值对象变量里面的值是这个对象在堆内存中的内存地址。因为它传递的值也就是这个内存地址这也是为什么函数内部对这个参数的修改会体现在外部的原因了因为他们都指向同一个对象。 
原文1https://segmentfault.com/a/1190000006752076 原文2https://juejin.cn/post/6992460438902423589