es5_Object
creat(指定propto,):
let obj = { x:1, y:2 };//es5 let obj2 = Object.create(obj,{ z:{ value:3 } }); //es6 let obj3={ __proto__:obj, z:3 } console.log(obj2);//打印Object {z: 3}; console.log(obj3);//打印Object {z: 3}; console.log(obj2.x);//打印1;
Object.defineProperty() 用来给对象定义属性的:
let obj = { x:1, y:2 } obj.k=3; Object.defineProperty(obj,"j",{ value:4, writable:true, //可写 enumerable:true, //可遍历 configurable:true //可配置 });
Object.defineProperties() 给对象指定对个属性:
Object.defineProperties(obj,{ "m":{ value:"m1" }, "l":{ value:"l1" } }) obj.j=50; obj.k=50; console.log(obj);//打印Object {x: 1, y: 2, k: 50, j: 50, m: "m1",l:"l1"}; for(var key in obj){ console.log(key);//打印x y k j; };
获取,设置:
getOwnPropertyDescriptor()用来获取属性的描述:
console.log(Object.getOwnPropertyDescriptor(obj,"x"));//打印Object {value: 1, writable: true, enumerable: true, configurable: true};
Object.keys()用来返回对象的key值:
console.log(Object.keys(obj));//打印["x", "y", "k", "j"];
Object.getOwnPropertyNames()获取所有属性名:
console.log(Object.getOwnPropertyNames(obj));//打印["x", "y", "k", "j", "m", "l"];
Object.preventExtensions():
Object.preventExtensions(obj);//让一个对象不可扩展,该对象无法再添加新的属性,但是可以删除现有属性;
Object.seal() :
Object.seal(obj);//对一个对象密封,该方法会阻止对象扩展,并将该对象的所有属性设置为不可配置;
Object.freeze() :
Object.freeze(obj);//对一个对象进行冻结,实现常量的需求,该方法会阻止对象扩展,并冻结对象,将其所有属性设置为只读和不可配置;
Object.isExtensible():
Object.isExtensible(obj);//判断对象是否扩展;
Object.isSealed():
Object.isSealed(obj);//判断对象是否密封;
Object.isFrozen():
Object.isFrozen(obj);//判断对象是否冻结;//writable:false不可改,true可改;//enumerable:false不可遍历,true可遍历;//configurable:false不可配置,true可配置;
'use strict':
严格模式 1.弃用了很多以前版本的语法,如果在用的话就提示错误;
严格模式 2.让你使用一些最新版本的语法;有些浏览器不支持新版本的语法,加上严格模式就支持了;
下面就是严格模式总结::
1.使用var声明变量严格模式中将不通过2.何使用'eval'的操作都会被禁止3.val作用域4.ith被禁用5.aller/callee 被禁用6.禁止扩展的对象添加新属性会报错7.除系统内置的属性会报错8.delete使用var声明的变量或挂在window上的变量报错9.delete不可删除属性(isSealed或isFrozen)的对象时报错10.对一个对象的只读属性进行赋值将报错11.对象有重名的属性将报错12.函数有重名的参数将报错13.八进制表示法被禁用14.arguments严格定义为参数,不再与形参绑定15.函数必须声明在顶层16.ES5里新增的关键字不能当做变量标示符使用,如implements, interface, let, package, private, protected, pulic, static, yield17.call/apply的第一个参数直接传入不包装为对象18.call/apply的第一个参数为null/undefined时,this为null/undefined19.bind的第一个参数为null/undefined时,this为null/undefined