
获得徽章 0
- 程序员究竟是褒义词还是贬义词?
4月份结束了字节的实习,来到了南方某985读研,然而身边的同学以及导师都瞧不起敲代码的,认为程序员就是一个实现他们想法的工具人等人赞过184 - 假设obj是一个JS的对象,那么obj.a1.a2.a3.a4.a5,如果中间有一个属性undefined了的话就会报错,但想中间有个属性undefined时能返回个默认值。
一般可以用下面的方式来写:
get(obj, "a1.a2.a3.a4.a5", 5) // 5是默认值
或者(自己瞎写的函数👀) attrs(obj).get("a1").get("a2").get("a3").get("a4").get("a5").value(5) // 5是默认值
如果使用ES6的Proxy就可以在最后一个属性上做处理,比如最后一个属性就命名为defaultValue,并且是个函数,如果访问的属性名叫defaultValue则结束递归。
代码如下:
const proxyObject = (object, name = "defaultValue") => new Proxy({}, {
get: (_, key) => key === name ? v => (object || v) : proxyObject(object && object[key] || void 6, name) });
console.log(proxyObject({ a: { b: 1 } }).a.b.defaultValue(2)); // 返回1 console.log(proxyObject({ a: { b: 1 } }).a.c.e.f.b.defaultValue(2)); // 返回2
或者最后一个属性是可调用的函数,代码如下:
function proxy (object) {
return new Proxy(function () {}, {
get (_, key) {
return proxy(object && object[key] || void 6);
},
apply (_, thisArg, [value]) { return object || value } })
}
console.log(proxy({ a: { b: { c: "hello world" } } }).a.b.c(3)); // hello world console.log(proxy({ a: { b: { c: "hello world" } } }).a.d.d(3)); // 3展开赞过23 - 个人信息:双非院校,专业排名2/255,自学前端5个月左右
个人技术:JS,es6,typescript,nodejs,graphql,react,Python,Java,MySQL,redis and so on
已拿offer:2019.4 字节跳动抖音直播中台前端实习生 北京
2019.4 腾讯企业微信前端实习生 广州展开等人赞过1416