字符串

实例对象新增方法

  • 字符串补全长度的功能:如果某个字符串不够指定长度,会在头部或尾部补全。
    • 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 ‘

  1. <a name="afZM1"></a>
  2. # 对象
  3. <a name="URV5L"></a>
  4. ## Object内置对象上新增的方法
  5. - `Object.getOwnPropertyDescriptors(obj)`
  6. - 作用:返回指定对象所有自身属性(非继承属性)的描述对象
  7. - 该方法的引入目的,主要是为了解决`Object.assign()`无法正确拷贝`get`属性和`set`属性的问题
  8. ```javascript
  9. // 案例一:了解Object.getOwnPropertyDescriptors()用法
  10. const obj = {
  11. foo: 123,
  12. get bar() { return 'abc' }
  13. };
  14. Object.getOwnPropertyDescriptors(obj)
  15. // { foo:
  16. // { value: 123,
  17. // writable: true,
  18. // enumerable: true,
  19. // configurable: true },
  20. // bar:
  21. // { get: [Function: get bar],
  22. // set: undefined,
  23. // enumerable: true,
  24. // configurable: true }
  25. // }
  1. // 案例二:Object.assign()无法正确拷贝set和get方法
  2. let obj = {
  3. _val: 0,
  4. get val() {
  5. return this._val
  6. },
  7. set val(val) {
  8. this._val = val
  9. }
  10. };
  11. let test = Object.assign(obj);
  12. test.val = 100; // 调用set方法修改后,影响了obj
  13. console.log(test.val); // 100
  14. console.log(obj.val); // 100
  1. // 案例三:用Object.getOwnPropertyDescriptors() 解决案例二的问题
  2. const shallowMerge = (target, source) => Object.defineProperties(
  3. target,
  4. Object.getOwnPropertyDescriptors(source)
  5. );
  6. let obj = {
  7. _val: 0,
  8. get val() {
  9. return this._val
  10. },
  11. set val(val) {
  12. this._val = val
  13. }
  14. };
  15. let test = {}
  16. shallowMerge(test, obj);
  17. test.val = 100
  18. console.log(test.val); // 100
  19. console.log(obj.val); // 0
  • 与对象遍历有关的方法
    • Object.values(obj):返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的属性值
    • Object.entries(obj):返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值对数组
    • Object.fromEntries():是Object.entries()的逆操作,用于将一个键值对数组转为对象
      1. // 案例一
      2. // 值的顺序与ES6里面 对象 的 属性名的遍历 的顺序一致
      3. // 如果原对象的属性名是一个 Symbol 值,该属性会被忽略
      4. const obj = { foo: 'd', 100: 'a', 2: 'b', 7: 'c' };
      5. Object.values(obj) // ["b", "c", "a", "d"]
      ```javascript // 案例二 // 获取顺序 同 案例一 // 如果原对象的属性名是一个 Symbol 值,该属性会被忽略 let obj = {

foo: ‘abc’, 1: ‘a’, 2: ‘b’ } Object.entries(obj);// [ [‘1’, ‘a’], [‘2’, ‘b’], [ ‘foo’, ‘abc’ ] ]

  1. ```javascript
  2. // 案例三
  3. Object.fromEntries([
  4. [Symbol(), 'm'],
  5. ['1', 'a'],
  6. ['2', 'b'],
  7. ['foo', 'abc']
  8. ])
  9. // {1: 'a', 2: 'b', foo: 'abc', Symbol(): 'm'}