整理一些或新奇,或有趣的内容
-
今天海贼王更新,路飞这个看起来很没脑子的人最近几话中一直很奇怪的挑衅看守们其实只是为了找到打败凯多的方法。
-
很久之前看见的一句话:计算机世界中的任何问题都可以通过添加一个中间件的方式来解决。当时看到认为有点夸张,可是最近又看到了这句话,感觉貌似很有道理的样子。
-
react新版本有了一个hooks的一个api其中包含了很多react现有的一些钩子函数,这样可以让编写组件的时候更多的去用函数式编程而非组件式编程。从个人倾向来说我是习惯于组件式编程的,因为函数式编程用的少,而且函数式编程没有this,不能用生命周期,而只能用来写无状态组件,虽然说react官方是推荐些无状态组件和函数组件的,但是其实用习惯了生命周期函数,有时候思维方式就会偏向于运用这些来管理状态,而且习惯于去用state去管理状态。可能要去熟悉一下hooks然后更多的去习惯写一些无状态组件和函数组件了。
-
今天突然说到了业务的贡献和发展,其实对我来说,从来这里之后就一直在写业务,而其中业务的一些架构和细节,也是在不断的业务迭代和项目bug中逐步理会的,在不断的被bug侵袭之后也养成了认真看交互稿的习惯,而不是大体看一下就开始做,一个成熟的开发者应该习惯先理顺业务逻辑,然后在开始开发,否则如果逻辑不通最后无法自洽,最后只会是一堆无用的代码。
-
react中的key,很多时候会图省事直接用map中的index来用,但是最近看了一些文档和关于eslint中的一些规定,我发现其实这样随便用其实是存在一些风险的,就在你有添加删除的操作的时候,key可能会发生变化,导致一些不可预料的错误。
-
http协议都出到3了,然后昨天看一下http协议的内容,知道了一个新的词RTT:RTT是Round Trip Time的缩写,通俗地说,就是通信一来一回的时间。然后个中的协议、链接等等一切都是为了在安全的基础上让RTT更小,因为在设备固定的情况下RTT基本上是一定的,所以尽量减小在访问时的RTT就可以缩短访问的时间,有更好的用户体验。
-
flutter一端多用的代码,可以把设备的代码编译为前端代码,几乎无痛,虽然目前还处于初级阶段,但是正在不断发展中。
-
JSDoc写js的注释,有一些规则,详见这里。
-
for-in 中一定要有 hasOwnProperty 的判断(即禁止直接读取原型对象的属性)
//bad
const arr = [];
const key = '';
for (key in obj) {
arr.push(obj[key]);
}
//good
const arr = [];
const key = '';
for (key in obj) {
if (obj.hasOwnProperty(key)) {
arr.push(obj[key]);
}
}这条我之前知道,但是不知道为什么,现在明白是防止直接读取到原型的属性,一般来说这些是不需要暴露出来的,所以也就不允许读取;
-
言论
如果说调试是移除软件 bug 的过程,那么编程一定是植入 bug 的过程。 --Edsger Dijkstra;
-
杨过
要他甚么公侯世爵,什么天下第一勇士,我只盼你好好的活着 --神雕侠侣
-
老子曰:随心欲不逾矩。私以为,写代码如是,代码写到一定境界,定时能随心所欲的写,却处处合乎规范,符合道理。道之一途,处处想通。
-
讲道理这个操作有点骚,虽然感觉很少会有人用到。
-
eslint不让for in object还是有道理的,这个确实很“可怕”。
-
// 判断数据类型
Object.prototype.toString.call();
Object.prototype.toString.call(undefined);
// "[object Undefined]"
Object.prototype.toString.call('');
// "[object String]"
Object.prototype.toString.call({});
// "[object Object]"
Object.prototype.toString.call([]);
// "[object Array]"
Object.prototype.toString.call(new RegExp());
// "[object RegExp]"
Object.prototype.toString.call(new Date());
// "[object Date]" -
之前有一些数据需要存到localstorage中,其中有一条数据是boolean类型,然而localstorage只能存储字符串,导致重新取值的时候就成了字符串的false,然后js中Boolean(“false ”) = true;所以localstorage中想要存储获取非字符串的数据,只能通过JSON parse和stringify,localstorage是个很差劲的设计,为什么只能存储字符串呢?
localStorage.setItem("item1", true);
JSON.parse(localStorage.getItem("item1")) === true // true -
代码的复杂性来源于业务的复杂性
今天(2022/07/14)遇到一个问题,在旧代码上更新一个需求,说起来很简单,新增一个tab,然后发送邮件,可是问题在于,新增的tab和旧数据不兼容,甚至在不同的服务中,所以这里的数据全部需要特殊化处理,然而这个组件本身承载了很多的业务,导致明明一个很简单的问题最后写了特别多的兼容性代码避免入侵旧业务。然而实际代码中特别多代码都是这样,因为兼容一个旧业务导致写了特别多条件性代码,系统时间越长,业务持续增长,这样的问题就会持续严重,直到某天无法维护导致重构,然后问题又会持续重复,原来不光人生是个轮回,代码同样是个轮回; -
底层开发者们用尽方法让系统有几倍的提升,但是顶层开发者们轻而易举的就把这种提升浪费掉了
每每想到这句话我写代码的时候都会让自己小心再小心,尽量不要去做无用的计算或者无用的渲染去浪费性能。