232020.3

(data.key = value) !== value

JavaScript 这门语言,让开发者感受编程乐趣的方式多种多样。今天掌握了一个新技能。我们来看下:

data.key = value
var a = data.key
value === a

这段代码平淡无奇对吗?但是,如果我告诉你,最后返回的结果是 false,是不是很好玩。

很显然,在这段代码前面,我还干了一些其他事情,导致最后的比较返回 false。我们来看看我都做了什么:

Object.defineProperty(data, 'key', {
  get() {
    return this._originalData.key
  },
  set(v) {
    this._originalData.key = { ...v }
  },
})

当前,在这之前,我还处理 _originalData 等,但这一段代码就可以了。也就是说,我规定了 key 属性在被赋值的时候,都要做怎么样的处理。这是已经到元编程的层面了,所以说 js 好玩。

这不单单是好玩的问题,而是在实际编程中,我们可能遇到的问题。你可能会问,谁会在自己的项目中搞这种蛋疼的事?不过很抱歉,很多处理数据的库,都会这么干,用来解决一些特别的逻辑。我想有一天你肯定也会这么干。我们来看一个可能出现 bug 的实用场景。

const files = []
const file = input()

files.push(file)
if (files.find(item => item === file) {
  // do something
}

类似的代码我们经常用吧。把一个元素加入到一个数组中,需要的时候,又在数组中,去找这个元素。这么干,说实话,经常出事。所以,我建议你最好 files.find(item => item.id === file.id),用一个字符串或数字作为唯一标志。不然翻车别怪我没提醒过。

为什么会这样呢?

你怎么知道 push 没有被修改过?

files.push = function(v) {
  return Array.prototype.push.call(this, { ...v })
}

所以,你敢随便自认为吗?js 编程就是这么任性。甚至有些人直接在原型链顶端搞事情,你扛得住吗?不要用一个没看过源码的不可靠第三方库!!!这是老人言。现在有些人,非蠢即坏,你防不住的。另外,善用 Reflect 或许也是忠告。

虽然你可以

const pushed = files.push(file)

这样可以得到 push 之后的真实数据,然而,然而,你怎么知道在类似 angular 之类的框架中,这些数据有没有被篡改过。总之,少年,我劝你善良。

14:19:27 已有0条回复
172020.3

Robust 登陆 iTunes,支持泛用型播客

今天收到苹果推送的邮件,Robust 已经可以在 PodCast 上搜索到了,赶紧去试了一下,真的可以了。如果你一直关注 Robust,可以直接在 iPhone 上找到 “PodCast” 或者叫 “播客” 这个应用,打开之后,搜索 “Robust” 关键字,就可以找到我们的音频了。大家订阅关注吧~

另外,你可以使用泛用型博客客户端,订阅如下 RSS 地址:

http://www.ximalaya.com/album/34869197.xml

这样也可以及时获得我的更新。我对自己的要求是,Robust 不闲聊生活,也不传递负能量。让我们专注聊技术,专心关注技术话题,我不会去追热点事件,但我会去聊背后的技术,专注于技术,也许不会获得很多关注,但是我可能也不需要那么多关注吧。

21:49:16 已有0条回复
122020.3

.nojekyll 原来是告诉 git 仓库文档系统不要忽略 _ 开头的文件。之前在做 docsify 的时候,一直没法加载 _sidebar.md 最后改成 index.md 之后搞定了,但是为啥 _sidebar.md 就不行呢?原来如此。

10:51:43 已有0条回复
112020.3

wordpress 模板层次结构和优先级(地图)

wordpress 模板层次结构和优先级

102020.3

因为想要体验yarn的优点,于是想安装yarn来使用,也可以顺带装逼。然而,当我使用官方的安装教程,一一试了一遍,全告失败。最后,使用brew安装它之后,不但没安装上,还把npm给干掉了,node好像也出了问题(看提示是要升级成一个新版本的node的样子),我mlgb,我就想试一试你,没想你还要接管我的node,劳资就只要这个版本的node啊!npm命令直接被搞死了,报错。

安装yarn导致npm坏掉

最后,直接放弃yarn,什么玩意儿。还得重新去node官网下载对应的版本来安装,艹!另外,百度网盘离线下载加超级会员,下载真香。

20:41:57 已有0条回复
042020.3

个人感觉,像 Flutter 这种框架,虽然理论上非常好,关键在于,会有谁花那么多时间 focus 在上面。它自己之所以自成一个独立体系 ,独立派别,根源是在 dart 语言上。除非在嵌入式开发方面,它称为某个不可替代的工具,否则,真的是要凉凉。你说用它做原生应用,有专门的 swift 和 android 工程师,用它写 web 简直是在开玩笑,只有在嵌入式方面目前还没有特别大的竞争对手。但是,基于 js 的 quickjs 也可以做嵌入式开发啊。如果你是开发者,虽然觉得 flutter 好,但是你手上有一把 js 的高级定制锤子,还会用其他工具么?如果当初 flutter 用 js,或者 dart 是基于完全的 js 语法,作为 js 的超级存在,那么我觉得后续发展会更好。可惜了可惜了。

13:36:01 已有3条回复
  1. 大佬 移动端 哪个会好一点 weex 还是?
    #912 zaqxsw 2020-03-08 19:49 回复
  2. 当然是 android 和 ios 原生开发最好,flutter 和 weex 应该差不多,但是 flutter 用 dart,rn 最惨
    #913 回复给#912 否子戈 2020-03-08 19:52 回复
  3. 谷歌做了v8,前端繁荣起来,flutter 如果继续使用 js ,发展应该会很不一样,估计是不同团队做的产品。
    #1333 大力 2024-09-24 16:54 回复