Vim
调试
日志
12/05 2018
使用 -D
参数可以开启 Debug 模式,
在 Debug 模式中可以使用 cont
, next
, interrupt
, step
, quit
等调试命令,
以及 breakadd
, breakdel
来添加和移除断点。
使用 -u
来禁止加载任何配置文件,使用 :source
命令逐个加载。
使用 :set verbose
和 :set verbosefile
等 配置变量 可以设置日志级别和输出文件,
-V
启动参数也可以起到同样的作用。
Bash
Shell
变量
运算符
10/23 2018
其实本文不是介绍 条件分支语法 的,
只介绍测试(test)语法,也就是说:本文只介绍如何写条件语法中的表达式 。
其实本文介绍的内容也并未针对 Bash,多数 Shell 都是适用的。
与其他编程语言类似,if
的条件可以接受任何 表达式 ,计算为真就进入分支。
只是在 Bash 中表达式是一个命令调用 。
ES6
Symbol
迭代器
10/14 2018
Symbol 唯一的用途就是标识对象属性,表明对象支持的功能。
相比于字符属性名,Symbol 的区别在于唯一,可避免名字冲突。
这样 Symbol 就给出了唯一标识类型信息的一种方式,从这个角度看有点类似 C++ 的 Traits 。
JavaScript
Node.js
浏览器
10/14 2018
JavaScript 俗称 JS,又称借S。起源于 Netscape 浏览器支持的页面脚本,目前已经被 TC39 标准化为 ECMAScript。
所以我们说的 JavaScript 是 ECMAScript 的一种实现,或者说符合 ES 标准的 JavaScript 就是 ECMAScript。
ES6
JavaScript
生成器
迭代器
09/29 2018
对集合中每个元素进行处理是很常见的操作,比如数组遍历、对象的属性遍历。
以往这些操作是通过 for
循环、.forEach
、.map
等方式进行,
在 ES6 中直接把迭代放在语言层面进行支持,同时提供定制 for...of
的机制。
借由迭代器机制为 Map、Array、String 等对象提供了统一的遍历语法,以及更方便的相互转换。
为方便编写迭代器还提供了生成器(Generator)语法。
本文展开介绍了这些相关概念:Iterables(可迭代对象)、Iterator(迭代器)、
Generator(生成器)和 Generator Function(生成器函数),
以及相关机制:Iterable Protocol、Iterator Protocol、Symbol.iterator。
JavaScript
Number
浮点数
二进制
运算符
06/29 2018
至今 JavaScript 已经有 6 种基本类型 了,其中数字类型(Number)是表示数字的唯一方法。
目前其标准维护在 ECMA262 ,在 JavaScript 语言层面不区分整数与浮点、符号与无符号。
所有数字都是 Number 类型,统一应用浮点数算术。
由于 JavaScript 中无法访问低层的二进制表示,而且 64 位可表示范围非常大,不容易遇到和了解到边界情况。
这篇文章对 JavaScript Number
的二进制表示进行简要的介绍,主要明确使用者观察到的边界,
解释 MAX_VALUE
, MIN_VALUE
, MAX_SAFE_INTEGER
, MIN_SAFE_INTEGER
, EPSILON
这些常量取值的原因;回答 POSITIVE_INFINITY
, NEGATIVE_INFINITY
, NaN
这些常量的表示方法。
iOS
动画
UIWebView
scroll
06/23 2018
Apple 在 App Store Review Guidelines
中提到 iOS 软件只允许使用其 WebKit 内核,事实上就是只能选择
UIWebView
和
WKWebView
来实现 Web 浏览。而官方推荐在 iOS 8 之后的系统中使用 WKWebview,UIWebView 已处于 Deprecated 状态:
In apps that run in iOS 8 and later, use the WKWebView class instead of using UIWebView. Additionally, consider setting the WKPreferences property javaScriptEnabled to false if you render files that are not supposed to run JavaScript. – Apple Developer
尽管如此,由于商业或技术上的原因很多国内浏览器仍然在使用 UIWebview 。
比如 WKWebview 直到 iOS11 才支持 WKURLSchemeHandler
(类似 UIWebView 的 NSURLProtocol )影响 Web 页面和 Native 通信的实现。
QQ 浏览器。曾经是 UIWebView 现在已经切换到 WKWebview(不存在官方 Changelog)。
微信内置浏览器。从2017年3月1日切换到 WKWebview,参考:iOS WKWebview 网页开发适配指南 。虽然不知道为啥 WKWebview 还要“适配”,WTF
UC 浏览器 。目前(版本 12.0.3.1077)仍然是 UIWebView。
百度(手机百度) 。目前(版本 10.8.6)仍然是 UIWebView。
本文描述的是 UIWebview 下的 Bug,Safari 和基于 WKWebview 的浏览器比如 Chrome 不受影响。