标签:bsp 不能 nbsp rip get names rabl obj 多个
对象的属性判断方法
1. in
2. hasOwnProperty()
JS中的对象的属性(键名)必须是字符串,为了弥补和其他语言的差距(键名可以是任意类型)
在最新ES6标准中引入了Map和Set
在ES6标准中引入了iterable类型,Array Map Set都属于iterable类型,可以使用for...of循环来遍历
for...of循环只会循环集合本身元素
ES5.1标准 forEach
forEach(element, index, array)
1. 属性的简洁表示法
允许直接写入变量和函数作为对象的属性和方法,只写属性名,这样属性值等同于同名属性的变量。
var foo = "bar"; var baz = { foo }; // 等价于 {foo: foo} function f(x, y){ return {x, y}; } // 等价于返回 {x: x, y: y}
2. 方法可以简写
var o = { method(){ return "hello, es6"; } }
3. ES6允许使用表达式作为对象字面量定义中的属性名
属性名的表达式和属性名的简洁写法不能同时使用
4. Object.is() 用来比较两个值是否严格相等,与 === 运算符基本一致
但是有两个例外,我们知道在ES5中NaN 和 NaN 是不相等的,但是用Object.is(NaN, NaN) 得到的就是 true
+0 和 -0 是相等的,但是用Object.is(+0, -0)得到的就是 false
5. Object.assign() 用来将源对象的所有可枚举属性复制到目标对象上,针对同名属性,后面的对象的属性会覆盖前面对象的属性。
只复制自身属性。 而不可枚举属性和继承属性都不会被复制
这个方法只是浅复制,需要深度复制可以使用 _.defaultsDeep (Lodash库)
如果将这个方法运用到了数组上,那么会将数组的成员索引值看做成属性名。
Object.assign([1,2,3], [4,5]) // 得到 [4,5,3] // [1,2,3] 看成 {"0": 1, "1": 2, "2": 3} // [4, 5] 看成 {"0": 4, "1": 5}
运用场景: 简化给对象添加属性和方法的写法
Object.assign(SomeClass.prototype, { someMethod(arg1, arg2){ } anotherMethod(){ } }); //给某个对象类的原型上添加方法
克隆对象
合并多个对象
为属性指定默认值
6. 在ES5中,可以通过getOwnPropertyDescriptor()方法获取对象属性的描述
ES5中,有三个操作会忽略不可枚举属性( enumerable = false)
for ... in
Object.keys()
JSON.stringify()
在ES6中,新增两个会忽略不可枚举属性的操作
Object.assign()
Reflect.enumerate()
ES6明确规定所有Class的原型方法都是不可枚举的
ES6一共有6种可以遍历对象属性的方法
a. for...in 遍历对象自身的和继承的所有可枚举的属性
b. Object.keys(obj) 返回一个包含对象自身的所有可枚举的属性的数组
c. Object.getOwnPropertyNames(obj) 返回一个包含对象自身的所有属性的数组 (包含不可枚举的属性)
d. Object.getOwnPropertySymbols(obj) 返回一个包含对象自身的所有Symbol属性的数组
e. Reflect.ownKeys(obj) 返回一个包含对象自身的所有属性的数组 (包含Symbol属性,不可枚举属性)
f. Reflect.enumerate(obj) 返回一个Iterator对象,遍历对象自身的和继承的所有可枚举的属性 与 for...in 相同
遍历对象属性时的顺序按照如下规则
1. 遍历所有属性名为数值的属性,按照数字排序
2. 遍历所有属性名为字符串的属性,按照生成时间排序
3. 遍历所有属性名为Symbol值的属性,按照生成时间排序
8. 对象的扩展运算符
对象的rest参数,解构赋值时,会将对象自身的所有可遍历当尚未被读取的属性分配到指定对象上,所有键和值都会被复制到新对象上。注意,这个复制也是浅赋值。
如果某个键值是复合类型,那么复制的只是这个值的引用。
对象的扩展运算符是用于取出参数对象的所有可遍历的属性,然后复制到当前对象中。类似于Object.assign()
标签:bsp 不能 nbsp rip get names rabl obj 多个
原文地址:http://www.cnblogs.com/joyjoe/p/6210228.html