【若川视野 x 源码共读】第36期 | omit.js 剔除对象中的属性
本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。
本篇是源码共读第36期 | omit.js 剔除对象中的属性,点击了解本期详情
前言
这是参与源码共读的第二期了,阅读源码使我们成为更好的自己~
项目结构
项目依赖:package.json
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
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;
}
总结
- 工作中没写过测试用例,通过本次源码学习了如果写一些测试文件。
- father包开发工具。
- 巩固知识:object.assign(),delete关键字。