对象的扩展(es6)

157 阅读2分钟

1.属性简单写法

允许在大括号里直接写入变量和函数作为对象的属性和方法 作为对象的属性和方法

用法:

1.简写方式

var foo = "bar";
var baz = { foo };
baz; // { foo: "baz" }
// 等价于
var baz = { foo: foo };

 var obj = {
  method() { return "yuan is an animal"; }
 }
 // 等价于
  var obj = {
  method: function() { return "yuan is an animal";}
}

1.方便用于函数返回值

 eg:
  getpoint(){
       var x=1,y=2,
       return {x,y};
 }
  this.getpoint();//{x:1,y:2}

2.方便于commin.js模块系统规范,输出一组变量

 module.exports初始化值为 { }

 getItem(){ return 1};  

  module.exports={getItem:getItem}  ==   module.exports={getItem} 

注意:在简写对象方法中不能使用箭头函数和构造函数

2.属性名表达方式

有两种方式:1.标识符作为属性名,2.表达式作为属性名(es6新增)

1.标识符作为属性名

 obj.foo = true;

2.表达式作为属性名

 obj["foo"] = true;

例子:

 let animal = {
 "type": "animal",
 [yuan]: "搜索"
 }
 animal["type"]; // "animal"
 animal[yuan]; // "搜索"
 

3.方法的name 属性 函数的name属性,返回函数名字

 let mon = {
  ['yuan']() {
   return "s";
 }
 }
 mon.yuan.name; //  "yuan"

4.Object.is():比较值相等

Object.is()用来比较两个值是否严格相等,与===基本一致

用法:

Object.is(a,b)

注意:Object.is()对于+0, -0为false,对于NaN为true

 Object.is(+0, -0) // false
 Object.is(NaN, NaN) // true

 +0 === -0 //true
 NaN === NaN // false

5.Object.assign():对象合并

Object.assign方法用来将源对象复制到目标对象,实际是浅拷贝。

语法:Object.assign(对象1,对象2,对象3}; 至少两个参数

1.复制一个对象

 const obj={a;1};
 const obj1=Object.assign({}.obj};
 

2.合并对象 合并相同属性的,后面覆盖前面的 const a={b:1}; const b={b:1}; const obj1=Object.assign(a,b);

注意:如果有同名属性,则后面会覆盖前面的。

6.Object.keys():返回一个数组,对象的键名

用法:Object.keys( a) ;

Object.keys():返回一个数组,对象的键名

Object.values():返回一个数组,对象的值

Object.entries():返回一个数组,可以将对象转为真正的Map数据结构

Object.fromEntries():是Object.entries()的逆操作,用于将一个键值对数组转为对象。

1.Object.keys(): var p={a:1,b:2,c:3} console.log(Object.keys(p)) //["a", "b", "c"]

2.Object.values(): var p={a:1,b:2,c:3} console.log(Object.values(p)) //[1,2,3]

3.Object.entries(): var p={a:1,b:2,c:3} console.log(Object.entries(p)) //[[a,1],[b,2],[c,3]]

4.Object.fromEntries():

  Object.fromEntries([  ['foo', 'bar'],
  ['baz', 42]
 ])
 // { foo: "bar", baz: 42 }

7.对象的扩展运算符 ... 作用:

1.快速复制一个对象

  var pjson={name:"sss",age:'18"},
 var pjson1={...pjson};

2.用在解构赋值中

  var {x,y,...z}={x:1,y:1,a;3,b:4};
  console.log(x,y,z)// x=1,y=2,z={a:3,b:4}
  

8.链判断运算符 ?.

用法:

obj?.prop // 对象属性

obj?.[expr] // 同上

func?.(...args) // 函数或对象方法的调用

a?.b 等同于 a == null ? undefined : a.b

a?.[x] 等同于 a == null ? undefined : a[x] a?.b() 等同于 a == null ? undefined : a.b()

a?.() 等同于 a == null ? undefined : a()

注意:如果a.b()不是函数要报错