学习omit.js源码

70 阅读1分钟

目的

初步了解如何调试代码

omit.js作用

返回一个剔除掉指定属性的新的对象
/**
* 
* @param {object} obj 待处理的对象
* @param {Array} fields 需要剔除的属性集合
* @returns 
*/
function omit(obj, fields) {
  // eslint-disable-next-line prefer-object-spread
  var shallowCopy = Object.assign({}, obj);  // 代码使用Object.assign方法,对要处理的对象进行浅拷贝处理

  for (var i = 0; i < fields.length; i += 1) {
    var key = fields[i];
    delete shallowCopy[key]; // 对需要删除的key进行遍历删除浅拷贝对象
  }

  return shallowCopy; // 返回新对象
}

export default omit;

开始

1、git clone https://github.com/benjycui/omit.js.git
2、查看packjson
3、npm包使用npm i --save omit.js
  "scripts": {
    "build": "father doc build --storybook",
    "compile": "father build",
    "coverage": "father test --coverage",
    "gh-pages": "father doc deploy",
    "lint": "eslint .",
    "prepublishOnly": "npm run compile && np --yolo --no-publish",
    "start": "father doc dev --storybook",
    "test": "father test"
  },

使用

1、创建一个js文件,通过node命令运行

const omit = require('omit.js')
let obj = {
  name: "wwh",
  age: 23,
  location: "西安"
}
console.log(omit.default(obj, ['location'])); 
console.log(omit.default(obj, ['age']));
console.log(omit.default(obj, ['name']));

image.png 默认导入需要使用require,要想使用import需要在packjson增加 "type": "module" 2、测试用例查看

import assert from 'assert';
import omit from '../src';

describe('omit', () => {
  it('should create a shallow copy', () => {
    const benjy = { name: 'Benjy' };
    const copy = omit(benjy, []);
    assert.deepEqual(copy, benjy);
    assert.notEqual(copy, benjy);
  });

  it('should drop fields which are passed in', () => {
    const benjy = { name: 'Benjy', age: 18 };
    assert.deepEqual(omit(benjy, ['age']), { name: 'Benjy' });
    assert.deepEqual(omit(benjy, ['name', 'age']), {});
  });
});

通过npm run test运行 omit库使用了assert断言,自己对assert断言并不了解,通过去node官网,了解到assert.deepEqual(深度相等意味着子对象的可枚举“自己的”属性也通过一些定义的规则递归评估)

代码调试

1、在Vscode中按 ctrl + shift + p,打开输入 >auto attach。默认是智能(smart)(配置auto-attach) 2、在需要的位置打断点,通过运行npm run test进行调试

总结

1、了解到了omit.js源码如何编写

2、通过运行测试用例让自己了解到了一些node.js的api

3、联系了一下简单的代码调试

4、对单元测试并不了解,在debugger的使用不熟练,还要继续提高