302020.9

一种防抓取防复制的网页内容展示方法

https://codepen.io/tangshuang/pen/OJyxWjy

今天想到了这个方法,原理也很简单,就是将内容使用css的pseudo-elements保存,这种元素的conten无法被复制。

292020.9

react状态管理器stook

222020.9

js里面的Object.keys, getOwnPropertyNames, in 和 for...in

今天遇到一个bug,实在有些困惑,就去查了一下MDN。事情的起源是这样:

class Some {
get field() {}
}

然后我在一个遍历中,做了如下判断:

if (key in some) ...

我自以为是的认为 key in some, key = 'field' 应该是 false,然而,返回结果是 true。然后我又分别 Object.keys, getOwnPropertyNames 去看 some 的 keys,都没有 'field' 呀?

问题的根源在于 class getter 是定义在原型链上,也就是说 'field' 并不在 some 这个实例上面,而是定义在原型链上的 getter 方法,所以 Object.keys, getOwnPropertyNames 当然都看不到这个属性。

另外,我把 in 和 for...in 中的 in 搞混,导致按错误的理解执行错误的操作还是没有得到预期答案。for...in 会遍历对象以及对象原型链上 enumerable 为 true 的属性,从整条原型链查找这一点和 in 一致,但 in 判断时忽略 enumerable。

Object.keys, Object.getOwnPropertyNames 的区别也很简单,Object.getOwnPropertyNames 返回自己的属性列表,不包含原型链上游,而 Object.keys 最严格,只返回不包含原型链上游且 enumerable 为 true 的属性名列表。

17:34:29 已有0条回复
182020.9

探索类型系统的底层 - 自己实现一个 TypeScript