【若川视野 x 源码共读】第36期 | omit.js 剔除对象中的属性

77 阅读2分钟

【若川视野 x 源码共读】第36期 | omit.js 剔除对象中的属性

本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。

本篇是源码共读第36期 | omit.js 剔除对象中的属性,点击了解本期详情

前言

这是参与源码共读的第二期了,阅读源码使我们成为更好的自己~

项目结构

image.png

项目依赖:package.json

image.png

assert

主要用于单元测试,有strict和legacy两种模式。

assert.equal(actual, expected[, message]),assert.deepEqual(actual, expected[, message]):判断严格相等,预期值与实际值全等。不仅比较值还比较引用类型。

  // 比较基本类型
  assert.equal('1', 1);
  // pass
  assert.equal([1,2,3], [1,2,3,4]);
  // 运行yarn test ---> error

  // 比较引用类型
  assert.deepEqual([1,2,3], [1,2,3,4], 'deepEqual');
  // error
  assert.deepEqual({tom: 'lucy'}, {tom: 'lucy'});
  // pass
  assert.deepEqual({tom: 'lucy'}, {tom: 'jack'});
  // error

image.png

assert.strictEqual(actual, expected[, message]),assert.deepStrictEqual(actual, expected[, message])判断相等,预期值与实际值相等

  // 除了比较值和值的引用外还需要比较类型
  assert.strictEqual('done', 'done');
  // pase
  assert.strictEqual('123', 123);
  // error
  assert.strictEqual([1,2,3], [1,2,3]);
  // error

  // 类型相等的同时值也需要相等
  assert.deepStrictEqual([1,2,3], [1,2,3,4], 'deepEqual');
  // error
  assert.deepStrictEqual({tom: 'lucy'}, {tom: 'lucy'});
  // pass
  assert.deepStrictEqual(
      { name: "jack", age: 33, address: { home: "123" } },
      { name: "jack", age: 33, address: { home: 123 } },
      "deepStrictEqual"
    );
  // error

等等...更多测试函数详见相关文档

father

father 是一款 NPM 包研发工具,能够帮助开发者更高效、高质量地研发 NPM 包、生成构建产物、再完成发布。更多内容

源码

function omit(obj, fields) {
  // 浅拷贝传入对象
  const shallowCopy = Object.assign({}, obj);

  for(let i = 0; i < fields.length; i++) {
    const key = fields[i];
    // 删除对应键值,改变原对象
    delete shallowCopy[key];
  }
  
  return shallowCopy;
}
  • Object.assign(target,source)  静态方法将一个或者多个源对象中所有可枚举自有属性复制到目标对象,并返回修改后的目标对象。

总结

  • 工作中没写过测试用例,通过本次源码学习了如果写一些测试文件。
  • father包开发工具。
  • 巩固知识:object.assign(),delete关键字。