// 设计一个函数 safeGet,可以对任意对象进行处理使其满足 const x = safeGet({ a: 'hello', b: { d: 'world' }, c: [-100, 200, -300], }); x.a() === 'hello' x.b.d() === 'world' x.c[0]() === -100 x.c[100]() === undefined x.c[100](1234) === 1234 x.c.map((e) => e()) === [-100, 200, -300] x.d.e() === undefined x.d.e('optional default value') === 'optional default value' x.y.z.a.b.c.d.e.f.g.h.i.j.k() === undefined function safeGet(data) { // write code here }
不太理解 safeGet 的应用场景?
有没有一种可能, ?. 可选链操作符 比较方便?
var x = { a: { b: 1 } };
console.log(x?.a) // { b: 1 }
console.log(x?.a.b.c) // undefined
PS: 需要优化兼容好像是 ES9 还是 ES10 的不记得了
PS:需要优化格式化插件,可能会被格式转成 x ? .a.b.c
function safeGet(data) { return new Proxy(() => {}, { get(target, prop) { if (data !== undefined && prop in data) { const value = data[prop]; if (typeof value === 'function' && prop !== 'constructor') { return value.bind(data); } return safeGet(value); } else { return safeGet(undefined); } }, apply(target, thisArg, args) { if (data !== undefined) { return data; } if (args.length > 0) { return args[0]; } return undefined; } });}// 测试const x = safeGet({ a: 'hello', b: { d: 'world' }, c: [-100, 200, -300],});console.log(x.a() === 'hello');console.log(x.b.d() === 'world');console.log(x.c[0]() === -100);console.log(x.c[100]() === undefined);console.log(x.c[100](1234) === 1234);console.log(JSON.stringify(x.c.map((e) => e())) === JSON.stringify([-100, 200, -300]));console.log(x.d.e() === undefined);console.log(x.d.e('optional default value') === 'optional default value');console.log(x.y.z.a.b.c.d.e.f.g.h.i.j.k() === undefined);
中间的那个细条
大佬们,这个效果怎么使用来实现呢,试了下 background:linear-gradient好像不可以做到这样的效果
请问这样的构造函数如何实现?
后台给了startTime和endTime的时间戳,通过他俩的差写一个倒计时,求解
https://play.vuejs.org/#eNqlVE2PmzAQ/StTLkskStIes9nVtmpV9dBL1... 上面地址中的代码需要修改成: 1:鼠标在红或绿色div上按下后移动鼠标,则相应的div会随着鼠标移动。 2:不管是红还是绿色div鼠标按下移动时不能超出窗口的边界。 有人知道怎么修改不?对鼠标那块的知识不怎么熟,学了忘。
本文向大家介绍javascript实现一个数值加法函数,包括了javascript实现一个数值加法函数的使用技巧和注意事项,需要的朋友参考一下 废话不多说,直接奉上代码 JS HTML: 以上所述就是本文的全部内容了,希望大家能够喜欢。