2019-11 上旬
- 创建于:2019-11-01
- 更新于:2023-03-16

# 2019-11-10: css +(加号)~ (波浪号) 选择器 ✅
好好想想先 😌
- 一句话
- 加号选择相邻的、紧接的、后面的兄弟元素
h1 + p { /* 选择紧接 h1 后面的 p */ }- 波浪号选择同级的、后面所有的兄弟元素
h1 ~ p { /* 选择和 h1 同级的,所有在 h1 后面的 p }
# 2019-11-09: let s1 = 'Hello world', let s2 = String('Hello world') 和 let s3 = new String('Hello world') 三者有什么区别 ✅
好好想想先 😌
参考链接
一句话
- new String 返回的是复杂类型
s2 === s1 // false s2 === s3 // false s1 === s3 // true s2 == s1 // true s2 == s3 // true
# 2019-11-08: Vue 怎样监听数组变化 ✅
好好想想先 😌
参考链接
一句话
- Array.prototype.xxx 可以直接使用,因为 Vue 改写了方法
- 改变单个值
- 使用
this.data.splice(index, 1, xxx) - 使用
Vue.set(this.data, index, xxx) - 使用
this.$set(this.data, index, xxx)
- 使用
# 2019-11-07: async/await 和 Generator 的关系,和 Promise 的关系 ✅
好好想想先 😌
参考链接
一句话
- Generator 函数
- 是一个状态机,返回一个迭代器
- 暂停恢复的原理 - 协程是比线程更小的运行单元
- async/await
- 内置执行器。Generator 函数的执行必须依靠执行器,而 async 函数自带执行器,无需手动执行 next() 方法。
- 更好的语义。async 和 await,比起星号和 yield,语义更清楚了。async 表示函数里有异步操作,await 表示紧跟在后面的表达式需要等待结果。
- 更广的适用性。co 模块约定,yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的 await 命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)。
- 返回值是 Promise。async 函数返回值是 Promise 对象,比 Generator 函数返回的 Iterator 对象方便,可以直接使用 then() 方法进行调用。
- Generator 函数
# 2019-11-06: 移动端怎样用 css 绘制 1px 的边框 ✅
好好想想先 😌
参考链接
一句话
- 移动端有 dpr 的概念,1px 实际上等于 1 * dpr px
- transform: scale
- box-shadow
# 2019-11-05: js 内存管理 ✅
好好想想先 😌
参考链接
一句话
- 内存生命周期
- 分配你所需要的内存
- 使用分配到的内存(读、写)
- 不需要时将其释放\归还
- 内存回收
- 引用计数垃圾收集
- 这是最初级的垃圾收集算法。此算法把“对象是否不再需要”简化定义为“对象有没有其他对象引用到它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。
- IE 6 7 使用该算法
- 无法处理循环引用的事例
- 标记、清除算法
- 这个算法假定设置一个叫做根(root)的对象(在 Javascript 里,根是全局对象)。
- 垃圾回收器将定期从根开始,找所有从根开始引用的对象,然后找这些对象引用的对象……从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不能获得的对象。
- 引用计数垃圾收集
- 内存生命周期
# 2019-11-04: 怎样去除 inline-block 间距 ✅
好好想想先 😌
参考链接
一句话
- 出现间距的原因是两个元素标签换行后中间会有间隔
- 解决方法为:
- 压缩 html,标签直接不换行,不保留空格
- margin 负值
- font-size: 0
- letter-spacing 和 word-spacing
# 2019-11-03: React Native 原理 ✅
好好想想先 😌
参考链接
一句话
- Java 层:该层主要提供了 Android 的 UI 渲染器 UIManager(将 JavaScript 映射成 Android Widget)以及一些其他的功能组件(例如:Fresco、Okhttp)等。
- C++层:该层主要完成了 Java 与 JavaScript 的通信以及执行 JavaScript 代码两件工作。
- JavaScript 层:该层提供了各种供开发者使用的组件以及一些工具库。
- 布局引擎:yoga
# 2019-11-02: async 和 await 的返回值,直接返回一个值和返回一个 Promise 的区别 ✅
好好想想先 😌
参考链接
一句话
- async 函数有返回值会直接 resolove
async function f() { return 'hello world' } f().then(console.log) // hello world async function f2() { return Promise.resolve('hello world') } f2.then(console.log) // hello world- async 函数内部抛出错误会直接进入 reject
async function e() { throw new Error('error') } e().catch(console.log) // error- 正常情况下,await 命令后面跟着的是 Promise ,如果不是的话,也会被转换成一个立即 resolve 的 Promise
async function f() { return await 'hello world' } f().then(console.log) // hello world- 错误处理
async function f() { if (error) { Promise.reject(error) } } async function f1() { await new Promise((resolve, reject) => { reject(new Error('Error')) }).catch(console.log) // Error }
# 2019-11-01: 什么时候会发送 options 请求 ✅
好好想想先 😌
参考链接
一句话
- 客户端 method 使用 PUT/DELETE/CONNECT/OPTIONS/TRACE/PATCH 会发送 options 请求
- 客户端 Content-Type 设置为 application/json 会发送 options 请求
- 解决办法:服务端设置 Access-Control-Max-Age
- Access-Control-Max-Age 这个响应首部表示 preflight request (预检请求)的返回结果(即 Access-Control-Allow-Methods 和 Access-Control-Allow-Headers 提供的信息) 可以被缓存的最长时间,单位是秒。(MDN)