字符串
实例对象新增方法
- 字符串补全长度的功能:如果某个字符串不够指定长度,会在头部或尾部补全。
padStart(n, str)
padEnd(n, str)
```javascript ‘x’.padStart(5, ‘ab’) // ‘ababx’ // 如果用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串 ‘x’.padStart(4, ‘ab’) // ‘abax’ ‘x’.padEnd(5, ‘ab’) // ‘xabab’ ‘x’.padEnd(4, ‘ab’) // ‘xaba
// 如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串 ‘xxx’.padStart(2, ‘ab’) // ‘xxx’ ‘xxx’.padEnd(2, ‘ab’) // ‘xxx’
// 如果省略第二个参数,默认使用空格补全长度 ‘x’.padStart(4) // ‘ x’ ‘x’.padEnd(4) // ‘x ‘
<a name="afZM1"></a>
# 对象
<a name="URV5L"></a>
## Object内置对象上新增的方法
- `Object.getOwnPropertyDescriptors(obj)`
- 作用:返回指定对象所有自身属性(非继承属性)的描述对象
- 该方法的引入目的,主要是为了解决`Object.assign()`无法正确拷贝`get`属性和`set`属性的问题
```javascript
// 案例一:了解Object.getOwnPropertyDescriptors()用法
const obj = {
foo: 123,
get bar() { return 'abc' }
};
Object.getOwnPropertyDescriptors(obj)
// { foo:
// { value: 123,
// writable: true,
// enumerable: true,
// configurable: true },
// bar:
// { get: [Function: get bar],
// set: undefined,
// enumerable: true,
// configurable: true }
// }
// 案例二:Object.assign()无法正确拷贝set和get方法
let obj = {
_val: 0,
get val() {
return this._val
},
set val(val) {
this._val = val
}
};
let test = Object.assign(obj);
test.val = 100; // 调用set方法修改后,影响了obj
console.log(test.val); // 100
console.log(obj.val); // 100
// 案例三:用Object.getOwnPropertyDescriptors() 解决案例二的问题
const shallowMerge = (target, source) => Object.defineProperties(
target,
Object.getOwnPropertyDescriptors(source)
);
let obj = {
_val: 0,
get val() {
return this._val
},
set val(val) {
this._val = val
}
};
let test = {}
shallowMerge(test, obj);
test.val = 100
console.log(test.val); // 100
console.log(obj.val); // 0
- 与对象遍历有关的方法
Object.values(obj)
:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的属性值Object.entries(obj)
:返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值对数组Object.fromEntries()
:是Object.entries()
的逆操作,用于将一个键值对数组转为对象
```javascript // 案例二 // 获取顺序 同 案例一 // 如果原对象的属性名是一个 Symbol 值,该属性会被忽略 let obj = {// 案例一
// 值的顺序与ES6里面 对象 的 属性名的遍历 的顺序一致
// 如果原对象的属性名是一个 Symbol 值,该属性会被忽略
const obj = { foo: 'd', 100: 'a', 2: 'b', 7: 'c' };
Object.values(obj) // ["b", "c", "a", "d"]
foo: ‘abc’, 1: ‘a’, 2: ‘b’ } Object.entries(obj);// [ [‘1’, ‘a’], [‘2’, ‘b’], [ ‘foo’, ‘abc’ ] ]
```javascript
// 案例三
Object.fromEntries([
[Symbol(), 'm'],
['1', 'a'],
['2', 'b'],
['foo', 'abc']
])
// {1: 'a', 2: 'b', foo: 'abc', Symbol(): 'm'}