1,基本类型
Number ,String,Boolean,Undefined,Null
2,引用类型
Object, Array,Function,Date
3,基本类型和引用类型的区别
1,内存分配方式不同
基本类型存储在栈的数据段中,因为他们占据的空间是固定的,也方便迅速查询变量的值
引用类型存储在堆中,变量是引用了他的指针来进行访问,因为他们的值的大小会改变,所以分配在堆中
2,两种类型在添加属性时候的区别
引用类型可以动态的给添加属性
基本类型的值是不可变
(值不可变比如说)
var name = 'jozo';
name.toUpperCase(); // 输出 'JOZO'
console.log(name); // 输出 'jozo'
//会发现原始的name并未发生改变,而是调用了toUpperCase()方法后返回的是一个新的字符串。
3,在复制的时候会有不同
基本类型在复制的时候,回创建一个新的值,再把这个值赋给新变量
引用类型在复制的时候,不会创建新的值,而是复制一个自己的指针赋给新变量
es6新增类型symbol``使得对象的属性名不仅可以是字符串,也可以是sybol类型
ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法,新方法的名字就有可能与现有方法产生冲突。
Symbol,表示独一无二的值。
// Symbol的使用
var mySymbol = Symbol()
a = {
[mySymbol]: 'aaaaa',
name: 'kangyi'
}
console.log(a.mySymbol); //undefined
console.log(a[mySymbol]); //aaaaa 取值的时候只能用中括号,不能用点运算符
Symbol值作为对象属性名时,不能用点运算符。
Symbol值作为对象属性名时,不会出现在for in ,for of 遍历中,也不会被Object.key(),Object.getOwnPropertyNames获取。
但是Object.getOwnPropertySymbols方法,可以返回当前对象包含的用作属性名的Symbol值