
对象遍历的几种方法
const params = { id: 1, name: 'bob', age: 13 }
Object.keys(params).forEach(key => console.log(key, params[key]))
Object.values(params).forEach(value => console.log(value))
// 可遍历不可枚举属性
const obj = Object.defineProperty({}, 'value1', {
value: 666,
writable: false,
enumerable: false,
configurable: false
})
const obj1 = Object.defineProperties({}, {
value1: { value: 666, enumerable: false },
value2: { value: 999, enumerable: false }
})
Object.getOwnPropertyNames(obj1).forEach(key => {
console.log(key)
})
// 可遍历对象原型上的属性
const obj3 = Object.create({ value1: 666 })
obj3.value2 = 999
for (key in obj3) {
console.log(key)
}
// 返回对象所有属性名的属性 包括不可枚举和Symbol属性
obj1[Symbol('foo')] = 'Symbol foo'
Reflect.ownKeys(obj1).forEach(key => {
// console.log(key) // Uncaught TypeError: Cannot convert a Symbol value to a string
console.log(obj1[key])
})
使用reduce拼接URL参数
const params = { id: 1, name: 'bob', age: 13 }
// reduce((a,b)=>{},'') //第二参数可以指初始值 String|Number
const urlParams = Object.keys(params).reduce((pre, current) => {
// return pre + current + `=` + params[current] + '&'
return pre + `${current}=${params[current]}&`
}, '?').slice(0, -1)
console.log(urlParams) // ?id=1&name=bob&age=13