字符串
实例对象新增方法
- 字符串补全长度的功能:如果某个字符串不够指定长度,会在头部或尾部补全。
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方法修改后,影响了objconsole.log(test.val); // 100console.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 = 100console.log(test.val); // 100console.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'}
