一、现在还有很多浏览器不能直接使用es6语法。特别是手机端的一些低版本的浏览器。都需要用bale转换一下。

但是目前流行的框架中(vue,react,angular)。都有自己的脚手架,都能用webpack转换下。或者直接自己配置webpack , fis3,nowa 等转换。

照样不是美滋滋。

二、属性的简洁写法 

//1.属性简洁表示语法
var foo = 'bar';
var obj = {foo};
console.log(obj);
//创建对象的函数
function createOjb(x = 1,y = 1){ //x = 1, y = 1; 参数的默认值
return {
x,y
}
}
var newObj = createOjb();
console.log(newObj); //{x:1,y:1}
var birthDate = '2017/8/12'
//2 方法的简写
var person = {
name:'绿巨人',
age:'200岁',
birthDate,
say(){
console.log(this.name); //等同于 say:function(){ console.log(this.name)};
}
}
person.say(); // 绿巨人
//in 方法
var msg = {
hello:'helloValue',
world:'worldValue'
}
console.log('hello' in msg,'helloValue' in msg);
// true,false; => 判断某个键值是在某个对象里面
//commonJS 模块化输出
function Obj(methods){
this.methods = methods || {};
}
Obj.prototype.getItem = function(key){
return key in this.methods ? methods[key] : null;
}
Obj.prototype.setItem = function(key,value){
this.methods[key] = value;
}
var obj = new Obj();
//module.exports = {obj};
//4.注意点 :简洁写法的属性名总是字符串,这会导致一些看上去比较奇怪的结果。

三、属性表达式

//属性名表达式
// 1. 对象添加属性的两种方式
var newObj = new Object();
newObj.name = 'html';
newObj['age'] = '20岁';
//对象字面量的方式 se5 中字面量方式下 属性名字只能用 字符串形式。不能用 ['name']
var newObj1 = {
name:'css',
age:'30岁'
}
//SE6
var newObj2 = {
['name']:'js',
['a' + 'ge']:'40岁',
['hello world']:'say hello world',
['say' + ' hi'](){
console.log(this['hello world'])
}
}
console.log(newObj2.name); // jss
console.log(newObj2['hello world']); // say hello world
newObj2['say hi'](); // say hello world
//!!!注意 属性名表达式是不能喝属性简写一起使用的
var objKey = {a:1};
var newObj3 = {
[objKey]:'我是一个对象'
}
console.log(newObj3); // {[object object]:'我是一对象'}
console.log(newObj3[{a:1}]); // 我是一个对象
console.log(newObj3['object object']); // undefined 是不是很奇怪啊

四、Object.is()

//Object.is();
//1.es5中
console.log(+0 === -0); // true
console.log(NaN === NaN); //false
//2.es6中
console.log(Object.is(+0,-0)); //false
console.log(Object.is(NaN,NaN)); //true
//在ES5中部署Object.is(); 方法
Object.defineProperty(Object,'is',{
value(x,y){
if(x === y){
return x !== 0 || 1/x === 1/y;
}
//针对NaN的情况
return x !== x && y !== y;
},
configurable:true,
enumerable:false,
writable:true
})

五、Object.assign()

 //Object.assign();  对象的合并  熟悉jquery 的人 var defaults = {a : 1} $.extend({},{},defaults || //{});
var target = {name:'es6'};
var target1 = {age:'5年'};
var target2 = {name:'es7'};
var target3 = {sex:'body'};
var defaults = {};
Object.assign(defaults,target,target1,target2,target3);
console.log(defaults); // {name: "es7", age: "5年", sex: "body"}
//从上面的defaults 的值可以看出 后面的属性会覆盖前面的属性。跟$.extend({} ,defaults || {});
// 一个道理
defaults.name = 'es8';
console.log(defaults); //{name: "es8", age: "5年", sex: "body"}
console.log(target2); //{ name:"es7"}
/*
!!! 注意 :: => 由此可以看出 Object.assign(); 是一个深拷贝的方法
!!!!!! (前提是目标某个原对象中没有对象属性)
ex:target = {
family:{
child:'七七'
}
}
目标对象属于对象属性时。就是浅拷贝啦。 跟 $.extend(true,{} , defaults || {}); 方法有区别。加了true 对象属性也进行深拷贝
*/
var tar = {
family:{
child:'七七'
}
}
var defaults1 = { };
Object.assign(defaults1,tar);
console.log(defaults1); // { family:{child:"七七"}};
defaults1.family.child = "琪琪";
console.log(defaults1); // { family:{child:"琪琪"}};
console.log(tar); // { family:{child:"琪琪"}};
//注意点2
// :: !!! Ojbect.assign() 方法只能克隆原对象。不能够克隆其继承的属性。
function cloneObject(obj){
let originProto = Object.getPrototypeOf(obj);
return Object.assign(Object.create(originProto), obj);
}
// Object.create() 方法是对其原型

六、属性的可枚举性

 //对象的可枚举性
var objEn = {};
Object.defineProperty(objEn,'foo',{
value:'不可枚举',
configurable:true,
enumerable:false,
})
console.log(Object.getOwnPropertyDescriptor(objEn,'foo'));
//{value: "不可枚举", writable: false, enumerable: false, configurable: true}
/*
描述对象的enumerable属性,称为”可枚举性“,如果该属性为false,就表示某些操作会忽略当前属性。
ES5 有三个操作会忽略enumerable为false的属性。
for...in循环:只遍历对象自身的和继承的可枚举的属性
Object.keys():返回对象自身的所有可枚举的属性的键名
JSON.stringify():只串行化对象自身的可枚举的属性
ES6 新增了一个操作Object.assign(),会忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。
*/

七、属性的遍历

//属性的遍历
var ojbEach = {
name:'es8',
age:'100年'
}
Object.defineProperty(ojbEach,'bar',{
value:'不可枚举',
enumerable:false,
writable:true,
configurable:true
})
//方法1 for in 循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
for(var key in ojbEach){
console.log(ojbEach[key]); // es8 100年
}
//方法2 Object.keys(); 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)。
var objArr = Object.keys(ojbEach); //
console.log(objArr); // ["name", "age"]
/*
方法3 Object.getOwnPropertyNames 返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)。
*/
var objEnArr = Object.getOwnPropertyNames(ojbEach);//
console.log(objEnArr); //["name", "age", "bar"]
//方法4 Object.getOwnPropertySymbols(obj) 返回一个数组,包含对象自身的所有 Symbol 属性。
/*方法5 Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管属性名是 Symbol 或字符串,也不管是否可枚举。
*/

es6 对象的扩展的更多相关文章

  1. es6对象的扩展

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

  2. Es6对象的扩展和Class类的基础知识笔记

    /*---------------------对象的扩展---------------------*/ //属性简写 ,属性名为变量名, 属性值为变量的值 export default functio ...

  3. ES6对象的扩展及新增方法

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

  4. web前端之es6对象的扩展

    1.属性的简洁表示法 2.属性名表达式 表达式作为对象的属性名 3.方法的 name 属性 例如:函数的name 属性,返回函数名. 4.Object.is() ES 比较两个值是否相等,只有两个运算 ...

  5. ES6 对象的扩展(下)

    属性的可枚举性 对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为.Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象. var ob ...

  6. ES6 对象的扩展(上)

    属性的简介表示法 允许直接写入变量和函数作为对象的属性和方法,这样的书写更简洁. function f( x, y ) { return { x, y }; } // 等同于 function f( ...

  7. ES6 对象的扩展 Object.assign()

    Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target). const target = { a: 1 }; const source1 ...

  8. ES6 对象的扩展 Object.is()

    ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0. ES6 提出“Same-va ...

  9. ES6对象扩展

    前面的话 随着JS应用复杂度的不断增加,开发者在程序中使用对象的数量也在持续增长,因此对象使用效率的提升就变得至关重要.ES6通过多种方式来加强对象的使用,通过简单的语法扩展,提供更多操作对象及与对象 ...

随机推荐

  1. Dig命令解析结果

    dig -t RT NAME @NS -t RT 指定要查询的资源记录类型 NAME 需要解析的域(域名) @NS 指定那个域名服务器负责解析 [root@xss ~]# dig www.ihoney ...

  2. docker swarm英文文档学习-4-swarm模式如何运行

    1)How nodes work Docker引擎1.12引入了集群模式,使你能够创建一个由一个或多个Docker引擎组成的集群,称为集群.集群由一个或多个节点组成:在群模式下运行Docker引擎1. ...

  3. 实例详解:MFC坐标轴实现

    需求:MFC坐标轴实现-----最好有步骤啊,刚刚才接触C++和MFC啊.MFC怎样在特定区域建立坐标轴,x轴自适应,y轴有固定范围,最好有网格. 解决思路:VC 内存绘图,不闪屏,具体代码如下: / ...

  4. JS 仿腾讯发表微博的效果

    JS 仿腾讯发表微博的效果 最近2天研究了下 腾讯发表微博的效果 特此来分享下,效果如下: 在此分享前 来谈谈本人编写代码的习惯,很多人会问我既然用的是jquery框架 为什么写的组件不用Jquery ...

  5. mysql安装,oracle安装

    mysql 版本:5.5.20 直接是是是装完, 密码设为123456, 检查服务, 然后装navicat 32位,64位均可,连接时输入root,123456. 连接成功!为所欲为操作数据库. ht ...

  6. 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出

    三组数据如下: {19.99 , 9.99 , 15.99 , 3.99 , 4.99} {12 , 8 , 13 ,29 ,50} {"Java T-shirt" , " ...

  7. PRML2-概率分布

    本博文来自<PRML第二章> 在第一章中说了对于模式识别问题来说,核心角色就是概率论.本章的目的一方面是为了介绍概率分布,另一方面也是为了对后面遇到的那些复杂问题先打下基础.本章关于分布上 ...

  8. jqgrid 在表格底部添加自定义按钮

    往往我们需要在jqgrid底部的分页行中添加一些自定义按钮,效果如下: 上图中,三个按钮均是自定义添加上的. 1.要新增自定义按钮在表格底部,仍离不开分页div,需要给jqgrid绑定分页方法 2.由 ...

  9. Oracle 存储过程procedure之数据更新-游标

    在日常工作中,经常会碰到后台外导一批数据,并将外导数据处理至系统表中的情况. 面临这种情况,我一般采用写存储过程批处理的方式完成,写好一次以后,再次有导入需求时,只需要将数据导入到中间表,然后执行存储 ...

  10. IP数据库

    免费的IP数据库,qqwry.dat文件:通过读文件来获取ip地址的地区信息: QQWry.Dat的格式如下: +----------+| 文件头 | (8字节)+----------+| 记录区 | ...