We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ES6允许直接写入变量和函数作为对象的属性和方法。意思就是说允许在对象中只写属性名,不用写属性值。这时,属性值等于属性名称所代表的变量。下面分别举一个例子来说明:
function getPoint(){ var x = 1 ; var y = 2; return {x,y} }
等同于
fucntion getPoint(x,y){ var x = 1 ; var y = 2; return {x:x,y:y} }
测试:
getPoint();//{x:1,y:10}
var obj = { fun(){ return "simply function"; } };
var obj = { fun: function(){ return "simply function"; } }
obj.fun();//simply function
ES6里允许定义对象的时候用表达式作为对象的属性名或者方法名,即把表达式放在方括号里。
let propKey = 'foo'; let obj = { [propKey] : true, ['a'+'bc'] : 123 }
obj.propKey; //true obj.abc ; //123
let obj = { ['h'+'ello'](){ return "hello world"; } }
obj.hello();//hello world
属性名表达式与简介表达式不能同时使用。
//错误的 var foo = 'bar'; var bar = 'abc'; var baz = { [foo] }; //正确 var foo = 'bar'; var baz = { [foo] : 'abc'}
这个比较容易理解,直接阐述文字。
函数的name属性返回函数名。对象方法也是函数,因此也有函数名。
Object.is()用来比较两个值yan'ge严格相等。与严格比价运算符(===)的行为基本一致。不同之处只有两个:一是 +0 不等于 -0 ,二是NaN等于自身
+0 === -0 //true NaN === NaN //false Object.is(+0,-0);//false Object.is(NaN,NaN);//true
Object.assign()方法是用于将源对象的可枚举属性复制到目标对象。它至少需要两个参数,第一是目标对象,后面的全是源对象。
demo:
var target = {a:1,b:2}; var source1 = {a:2,c:5}; var source2 = {a:3,d:6}; Object.assign(target,source1,source2); target//{a:3,b:2,c:5,d:6}
Object.assign可用于处理数组,但是会将其视为对象
Object.assign([1,2,3],[4,5]); //[4,5,3]
具体例子参考阮一峰的ES6标准入门
对象的没个属性都有一个描述对象(Descriptor),可通过Object.getOwnPropertyDescriptor(object,prop),object表示对象,prop表示对象的里的一个属性,用的时候需要加上引号。描述对象里面有个enumerable(可枚举性)属性,来描述该属性是否可枚举。
ES5中会忽略enumerable为false的属性
ES6新增的操作
ES6中一共有6中方法可以遍历对象的属性。
以上6种方法遍历对象的属性遵守同样的属性遍历次序规则
首先遍历所有属性名为数值的属性,按照数字排序
其次遍历所有属性名为字符串的属性,按照生成时间排序
最后遍历所有属性名为Symbol值的属性,按照生成时间排序
Reflect.ownkeys({[Symbol()]:0,b:0,10:0,2:0,a:0}) //['2','10','b','a',Symbol()]
(前后应该有两个下划线,这里没显示出来)。用来读取或者设置当前对象的prototype对象。但是一般不直接对这个属性进行操作,而是通过Object.setProtortypeOf()(写操作)、Object.getPrototypeOf()(读操作)或者Object.create()(生成操作)代替。
let proto = {}; let obj = { x : 10}; Object.setProtortypeOf(obj,proto); proto.y = 20; proto.z = 40; obj.x //10 obj.y //20 obj.z //40
function Rectangle(){} var rec = new Rectangle(); Object.getPrototypeOf(rec) === Rectangele.prototype // true
ES7中提案,将rest参数/扩展运算符(...)引入对象。
Rest参数用于从一个对象取值,相当于将所有可遍历尚未被读取的属性,分配到制定的对象上。所有的键及其值都会复制到新对象上。需要注意的是rest参数的复制是浅复制,并且也不会复制继承自原型对象的属性。
简单的demo
let {x,y,...k} = {x:2, y:3,z:4,a:5}; x //2 y //3 k //{z:4,a:5}
扩展运算符用于取出参数对象的所有可遍历属性,复制到当前对象中。
let z = {a:3 ,b:4}; let n = {...z}; n //{a:3,b:4}
扩展运算符还可以合并两个对象。
let a = { c:5,d:6 }; let b = { e:7,f:8 }; let ab = {...a,...b}; ab //{c:5,d:6,e:7,f:7}
扩展运算符还可以自定义属性,会在新对象中覆盖掉原有参数。
let a = {x:1,y:2}; let aWithOverides = {...a,x:3,y:4}; aWithOverides //{x:4,y:4}
The text was updated successfully, but these errors were encountered:
No branches or pull requests
1. 属性的简洁表示法
ES6允许直接写入变量和函数作为对象的属性和方法。意思就是说允许在对象中只写属性名,不用写属性值。这时,属性值等于属性名称所代表的变量。下面分别举一个例子来说明:
属性:
等同于
测试:
函数:
等同于
测试:
2. 属性名表达式
ES6里允许定义对象的时候用表达式作为对象的属性名或者方法名,即把表达式放在方括号里。
属性
测试:
方法
测试:
注意:
属性名表达式与简介表达式不能同时使用。
3. 方法的name属性
这个比较容易理解,直接阐述文字。
函数的name属性返回函数名。对象方法也是函数,因此也有函数名。
4. Oject.is()
Object.is()用来比较两个值yan'ge严格相等。与严格比价运算符(===)的行为基本一致。不同之处只有两个:一是 +0 不等于 -0 ,二是NaN等于自身
5. Oject.assign()
Object.assign()方法是用于将源对象的可枚举属性复制到目标对象。它至少需要两个参数,第一是目标对象,后面的全是源对象。
注意:
demo:
Object.assign可用于处理数组,但是会将其视为对象
其他用处
具体例子参考阮一峰的ES6标准入门
6. 属性的可枚举性
对象的没个属性都有一个描述对象(Descriptor),可通过Object.getOwnPropertyDescriptor(object,prop),object表示对象,prop表示对象的里的一个属性,用的时候需要加上引号。描述对象里面有个enumerable(可枚举性)属性,来描述该属性是否可枚举。
ES5中会忽略enumerable为false的属性
ES6新增的操作
7. 属性的遍历
ES6中一共有6中方法可以遍历对象的属性。
以上6种方法遍历对象的属性遵守同样的属性遍历次序规则
首先遍历所有属性名为数值的属性,按照数字排序
其次遍历所有属性名为字符串的属性,按照生成时间排序
最后遍历所有属性名为Symbol值的属性,按照生成时间排序
Reflect.ownkeys({[Symbol()]:0,b:0,10:0,2:0,a:0})
//['2','10','b','a',Symbol()]
8. proto 属性,Object.setPrototypeOf(),Object.getPrototypeOf()
proto 属性
(前后应该有两个下划线,这里没显示出来)。用来读取或者设置当前对象的prototype对象。但是一般不直接对这个属性进行操作,而是通过Object.setProtortypeOf()(写操作)、Object.getPrototypeOf()(读操作)或者Object.create()(生成操作)代替。
Object.setProtortypeOf()
Object.getProtortypeOf()
9. 对象的扩展运算符
ES7中提案,将rest参数/扩展运算符(...)引入对象。
Rest参数
Rest参数用于从一个对象取值,相当于将所有可遍历尚未被读取的属性,分配到制定的对象上。所有的键及其值都会复制到新对象上。需要注意的是rest参数的复制是浅复制,并且也不会复制继承自原型对象的属性。
简单的demo
扩展运算符
扩展运算符用于取出参数对象的所有可遍历属性,复制到当前对象中。
扩展运算符还可以合并两个对象。
扩展运算符还可以自定义属性,会在新对象中覆盖掉原有参数。
The text was updated successfully, but these errors were encountered: