对象
对象的属性
-
属性名可省略
ES6中,当对象中的key:value键值对,如果value是个变量/函数,此时省略key,key的值就是变量名/函数名。
var a = 1;
var obj = {
a,
fn(){
console.log(1)
}
obj;
//{a:1,fn:fn(){console.log(1)}}
2.属性名可变
实际上大多数浏览器都已支持此方式
var a = 'name';
var obj = {};
obj[a] = '全栈前端';
-
属性的描述器(Descriptor)
属性的此对象用来控制属性的行为,常用到枚举(enumerable)
查看属性的描述器:
Object.getOwnPropertyDescriptor(object,key)
var obj = {a:1};
Object.getOwnPropertyDescriptor(obj,'a');
//{value:1,writable:true,enumerable:true,configurable:true}
-
可枚举性
属性的enumerable值,不可枚举时以下操作会忽略此属性:
1.for...in...循环
for in 循环也会遍历到继承的属性(最初枚举只为了遍历开某些属性,比如toString方法等)
2.Object.keys()
3.JSON.stringify()
4.Object.assign()
5.Reflect.enumerable()
ES6对象常用的方法
1.合并对象Object.assign(target,source...)
此方法将其他对象的可枚举属性浅合并到目标对象里,重复的会被覆盖
var obj = {a:1};
var obj1={b:2};
Object.assign(obj,obj1);
obj;
//{a:1,b:2}
注:克隆对象可使用此方法解决
- ES6对象不常用方法
Object.is(val1,val2)
比较2个值是否全等,基本同===(NaN比较和+0,-0比较结果不同)
JS第七种数据类型Symbol
七种数据类型
bolean、number 、string、undefined、null、object、symbol(标示类型)
symbol含义
表示独一无二的,是基本数据类型的一种,类似字符串。
它是为了解决命名重复问题。
symbol创建
symbol类型数据只能使用Symbol()函数创建
注意:
- symbol值不能与其他类型值进行运算
var s = Symbol();
s;
//输出Symbol()
Symbol(del)函数
该函数返回一个symbol类型的值,其中参数des表示对值的描述
注意:
symbol函数返回的值永远不相同,即便参数des相同,返回值也不同。
转化
类型数据不会自动转化,可以转换为字符串或布尔值
var s = Symbol("name");
String(s);//"Symbol(name)"
Boolean(s);//true
!s;//false
//if语句也可
if(s){
}
方法
1.Symbol.for(des)
登记symbol值,使用此方法生成的symbol值,如果des相同则认为是同一个值。
var s1 = Symbol.for("ss");
var s2 = Symbol.for("ss");
s1===s2;
//true
2.Symbol.keyFor(var)
返回已登记symbol的描述之
var s1=Symbol.for("ss");
Symbol.keyFor(s1);
//ss
应用
1.作为对象的key的值
必须使用[],取值用。语法报错(点语法认为后面是字符串)
var s=Symbol();
var obj={
[s]:1
};
obj;//{symbol():1}
obj[s];//1
注:
(1)对象中属性名是symbol则无法用for in变量,使用Object.getOwnPropertySymbo()返回所有symbol属性名的数组或者使用Reflect.ownKeys()返回所有属性名的数组
(2)用作私有属性
Set结构
概念
Set结构类似数组,但是不会有重复的值
创建
Set结构只能通过Set()构造器创建
var s=new Set();
s.add(1);
s.add(2);
s.add(1);
s;//Set(2){1,2}
注:symbol数据类型由Symbol函数创建,不需要实例化
Set([arr])构造函数
用来创建一个Set结构的数据,参数arr可选(初始化数据)
var s = new Set([1,2,2]);
s;//Set(2){1,2}
Set结构的属性和方法
属性
1.size成员数量
2.constructor构造器,自然是Set
方法
1.add(value)添加值并返回自身(可链式操作)
2.delete删除某个值,返回true/false(删除不存在的value)
3.clear()清空所有值,无返回值
4.has(value)查找,返回true/false
5.keys()、values()、entries()、forEach()不常用
遍历
默认可遍历(实际调用的values()方法)
for...of
var s = new S([1,2,3]);
for(i of s){
console.log(i)
}
//1,2,3
应用
1.Array.from()或者...展开符号,可以将Set结构转为数组
2.数组去重
var arr = [1,2,2];
var s = new Set(arr);
var newArr=Array.from(s);
newArr;//[1,2]
WeakSet
类似Set,但是只能存放对象,而且保存的数据都是弱引用(不被垃圾回收机制计算在内,意味着保存的数据很可能会消失,且弱引用不可遍历)
-
创建:WeakSet()构造器
-
方法:add、delete、has
-
属性:无size属性
-应用:保存dom,不必担心内存泄露-----本系列文章到此结束,喜欢的点个赞再走。
网友评论