一、对象中的属性及方法
1、属性
属性简写:
当对象属性名与属性值变量相同可以简写
eg:

    let [name,age]=['nzc','18'];
let obj = {
name:name,
age:age
};
//简写方式:
let obj = {
name,
age
};

表达式属性名:
可以使用[]里面放置变量或表达式来构建对象属性名
eg:

    let temp = 'my';
let myAge = 18;
let obj = {
[temp+'Name']:'nzc', //类似 myName:'nzc'
[temp+'Age']:myAge //类似 myAge:myAge 该种情况下虽然添加的属性名为myAge,但不能简写为[temp+'Age'] ->属性名与属性值变量名此刻是不同的
};

2、方法
a、方法简写及多种写法
当对象方法名与赋值函数名相同时,对象方法可以简写
eg:

    function getAge(){};
let obj = {
getName(){}, // getName:function(){} 形式的简写【可以省略 :function 】
getAge, // getAge:getAge 形式的简写方式
sayHi:()=>{} //ES6中箭头函数的使用
};   

注:
    ES6中箭头函数中的this指向为该箭头函数【声明时】所处的父模块作用域中的this指向
    ES6中箭头函数中的arguments不保存实参,不进行实参的使用
    
b、方法(函数)的name属性    【返回函数名】
eg:

    function test(){};
let obj = {
//下面四种函数定义方法类似,只不过第一种函数的定义引用地址为外部函数test()空间地址
test
//test(){}
//test:function(){}
//test:()=>{}
};
console.log(obj.test.name); //test

3、新增的对象属性及方法
Object.is(param1,param2)   【判断两参数值是否全等 === ,返回boolean】    
该方法与全等 === 不同之处在于:
a、判断NaN 与 NaN返回结果为true
eg:

    Object.is(NaN,NaN);    //true         isNaN(NaN)  //true  可以判断一个数是否为NaN
   console.log(NaN === NaN);  //false

b、判断+0 与 -0返回结果为false
eg:

    Object.is(+0,-0);    //false
   console.log(+0 === -0);  //true

Object.assign(targetObj,o1,o2...)    【对象的复制(值赋值)】(区别值传递赋值与址传递赋值)
a、参数为一个时,返回该对象的引用地址
b、参数为多个时,获取一个或多个对象中的所有属性及方法复制到第一个targetObj参数,返回targetObj对象
c、参数为多个时,复制对象中的函数(function)、数组(array)、对象(object)仍为址传递赋值,相同属性名值为其最后出现的值
eg:

    //Object.assign()   对象的浅复制,对象的合并
let obj = {
name:'zhangsan',
friends:[1,2,3],
sayName:function(){}
}; //let obj2 = obj;
let obj2 = Object.assign(obj);
console.log(obj === obj2); //true
obj2.name = 'nzc'; //对象的合并
let obj3 = Object.assign({},obj); console.log(obj3 === obj); //false
console.log(obj3.sayName === obj.sayName); //true
console.log(obj3.firends === obj.firends); //true let obj4 = {};
Object.assign(obj4,obj,obj2);
console.log(obj4);

Object.assign示例

__proto__     内部属性,指向当前对象的原型对象【一般不直接使用】

Object. setPrototypeOf(obj,prototype)    【设置一个对象的原型对象  prototype指向】

Object. getPrototypeOf(obj)    【获取一个对象的原型对象】

Object.keys(obj)    【返回包含所有属性名的数组】

Object.values(obj)        【返回包含所有属性值的数组】

Object.entries(obj)    【返回对象中属性名、属性值以key-value形式的数组组成的二维数组】  [[key1,value1],[key2,value2]]
注:
    迭代器对象可以使用for-of来遍历获取里面的值
eg:

    for(let [key,value] of Object.entries(obj)){
console.log(key,value); //key为obj的属性名,value为对应的属性值
}

for-of遍历数组    【类似与for-in方法对对象的遍历】
a、可以遍历数组及类数组对象
b、不能直接用来遍历对象,但可以遍历entries转化对象后的迭代器数组对象
eg:

    let obj = {
name:'nzc',
age:18,
sayName(){}
};
//遍历打印对象的所有属性名
   console.log(Object.keys(obj));  //['name','age',sayName]
for(let key of Object.keys(obj)){
console.log(key);  
}
//遍历打印对象的所有属性值
   console.log(Object.values(obj));  //['nzc',18,[Function:sayName]]
for(let value of Object.values(obj)){
console.log(value);  
}
//遍历打印对象的属性名和属性值【不能直接遍历打印对象】
for(let [key,value] of Object.entries(obj)){
console.log(key,value);
}
//打印对象key-value形式转化的二维数组 [['name','nzc'],['age',18],['sayName',[Function:sayName]]]
console.log(Object.entries(obj));

ES6 对象的拓展(三)的更多相关文章

  1. ES6对象及ES6对象简单拓展

    ES6对象和传统的JS比较起来支持简写,比如说属性简写方法简写,还支持name属性,可以通过他迅速得到函数属性名表达式(如果是用bind方法创造的函数name属性会返回bound加上原函数的名字,Fu ...

  2. ES6对象的拓展

    属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; //允许直接写入变量和函数作为 ...

  3. ES6必知必会 (三)—— 数组和对象的拓展

    数组的扩展 1.拓展运算符('...'),它相当于rest参数的逆运算,用于将一个数组转换为用逗号分隔的参数序列: console.log(...[1, 2, 3]) // 1 2 3 console ...

  4. ES6 学习笔记之对象的拓展

    1.属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样书写更加简洁. const foo = 'bar'; const baz = {foo}; baz //{foo: &q ...

  5. ES6 对象拓展方法

    一,ES6 对象拓展方法 ES6为对象提供了一些拓展方法,下面列举几个比较常见的对象拓展方法.

  6. es6 入坑笔记(三)---数组,对象扩展

    数组扩展 循环 arr.foreach(){ //回调函数 function(val,index,arr){ //val:当前读取到的数组的值,index:当前读取道德数组的索引,arr:当前的数组名 ...

  7. ES6 数组方法拓展

    ES6 数组方法拓展 1.Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括E ...

  8. es6对象字面量增强

    相对于ES5,ES6的对象字面量得到了很大程度的增强.这些改进我们可以输入更少的代码同时语法更易于理解.那就一起来看看对象增强的功能.对象字面量简写(Object Literal Shorthand) ...

  9. es6对象的扩展

    对象(object)是 JavaScript 最重要的数据结构之一. object 在es6中新增了很多便利的方法 在es6中允许直接写入变量和方法的名称直接作为对象的属性 let x =1 ,y=2 ...

随机推荐

  1. 201871010101- 陈来弟《面向对象程序设计(java)》第6-7周学习总结

    201871010101- 陈来弟<面向对象程序设计(java)>第6-7周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  2. Vs2012帮助文档安装介绍

    Vs2012的帮助文档:Microsoft Help Viewer.exe,vs2010对应的是1.0,vs2012对应的是2.0,版本号以此类推 与早期的chm格式的msdn帮助文档不同在于: 1. ...

  3. LeetCode 112. Path Sum路径总和 (C++)

    题目: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up ...

  4. 洛谷 P1156 垃圾陷阱 题解

    题目传送门 dp+排序+01背包 就完事了??? 貌似就是这样的 代码: //dp 排序 01背包 #include<iostream> #include<cstdio> #i ...

  5. Web协议详解与抓包实战:HTTP1协议-HTTP 响应行(3)

    一.HTTP 响应行 二.响应码分类:1xx 三.响应码分类: 2xx 1. 201 Created: 有新资源在服务器端被成功创建 2.207 Multi-Status:RFC4918 ,在 WEB ...

  6. DP问题(2) : hdu 1421

    题目转自hdu 1421,题目传送门 题目大意: 给你n个物品,你要搬走2*k个(也就是搬k次) 每次搬需要花费v,v=(ai-aj)2 (i表示左手拿的物品重量,j表示右手拿的物品的重量) 要求所有 ...

  7. 【微信小程序】获取用户地理位置权限,二次请求授权,逆解析获取地址

    摘要:微信小程序内获取用户地理位置信息授权,被拒绝后二次获取,获取权限后逆解析得到用户所在省市区等.. 场景:商城类小程序,在首页时需展示附近门店,即用户刚进入小程序时就需要获取到用户位置信息 ste ...

  8. 第02组 Alpha冲刺(5/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 准备"Alpha事后诸葛亮" 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们 ...

  9. 部署WP程序到自己的手机

    参考的地址 http://www.cnblogs.com/zigzagPath/p/3313831.html

  10. gcc/g++ -O 优化选项说明

    查查gcc手册就知道了,每个编译选项都控制着不同的优化选项 下面从网络上copy过来的,真要用到这些还是推荐查阅手册 -O设置一共有五种:-O0.-O1.-O2.-O3和-Os. 除了-O0以外,每一 ...