2016年10月9日星期日

Google Blog 10/10/2016 (a.m.)

    • 但位操作符并不直接操作64位的值。而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换回64位
    • 前31位用于表示整数的值。第32位用于表示数值的符号
    • 对于无符号整数来说,第32位不再表示符号
    • 按位非操作的本质:操作数的负值减1
    • 在使用逻辑与操作符时要始终铭记它是一个短路操作符
    • 逻辑或操作符也是短路操作符。也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。
    • ECMAScript程序的赋值语句经常会使用这种模式
    • 由于大写字母的字符编码全部小于小写字母的字符编码
    • 如果要真正按字母表顺序比较字符串,就必须把两个操作数转换为相同的大小写形式(全部大写或全部小写),然后再执行比较
    • 另一种奇怪的现象发生在比较两个数字字符串的情况下

Posted from Diigo. The rest of my favorite links are here.

2016年10月8日星期六

Google Blog 10/09/2016 (a.m.)

    • ECMAScript中有5种简单数据类型(也称为基本数据类型):UndefinedNullBooleanNumberString
    • 还有1种复杂数据类型——Object
    • 即用var操作符定义的变量将成为定义该变量的作用域中的局部变量
      • 在函数中使用var定义一个变量 这个变量在函数退出之后就会被销毁..如果在函数中没有使用`var`定义一个变量,那么这个变量就会变成全局变量.在函数外部可以被访问到,这是很可怕的事情
    • 给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误。
    • 在严格模式下,不能定义名为evalarguments的变量,否则会导致语法错误。
    • 关键字也是语言保留的,不能用作标识符
    • 尽管保留字在这门语言中还没有任何特定的用途,但它们有可能在将来被用作关键字
    • 区分大小写
    • 第一个字符必须是一个字母、下划线(_)或一个美元符号($
    • 其他字符可以是字母、下划线、美元符号或数字
    • ECMAScript标识符采用驼峰大小写格式
    • 要在整个脚本中启用严格模式,可以在顶部添加如下代码
      • "use strict";
    • 指定函数在严格模式下执
      • 在函数体内部使用"use strict";
    • 以一个分号结尾;如果省略分号,则由解析器确定语句的结尾
    • 建议任何时候都不要省略它
      • 压缩代码如果没有分号可能会导致压缩错误
    • 最佳实践是始终在控制语句中使用代码块——即使代码块中只有一条语句
    • “立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行
    • 没有 deferasync,浏览器会立即加载并执行指定的脚本
    • 加载与执行并行进行(异步)
    • 加载并行进行(异步)
    • 执行要在所有元素解析完成之后
    • DOMContentLoaded 事件触发之前完成
    • deferasync 在网络读取(下载)这块儿是一样的,都是异步的(相较于 HTML 解析)
    • 按照加载顺序执行脚本的,这一点要善加利用
    • 只要它加载完了就会立刻执行
    • 乱序执行的主
    • 对于那些可以不依赖任何脚本或不被任何脚本依赖的脚本来说却是非常合适
    • 最典型的例子:Google Analytics
    • HTML5规范要求脚本执行应该按照脚本出现的先后顺序执行,但实际情况下,延迟脚本不一定按照先后顺序执行
  • tags: JavaScript高级程序设计 JavaScript

    • 所有<script>元素都会按照它们在页面中出现的先后顺序依次被解析。
    • 一般应该把<script>元素放在页面最后,即主要内容后面
    • 使用<noscript>元素可以指定在不支持脚本的浏览器中显示的替代内容
  • tags: JavaScript高级程序设计 JavaScript

    • 可维护性
    • 如果有两个页面都使用同一个文件,那么这个文件只需下载一次
    • 通过外部文件来包含JavaScript无须使用前面提到XHTML或注释hack

Posted from Diigo. The rest of my favorite links are here.

Google Blog 10/08/2016 (p.m.)

    • 解决这种问题有两种方式:
    • 放弃前面的所有请求,只执行最后一次请求。
    • 放弃后面的所有请求,只执行第一次请求
    • 注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行
    • 核心思想是维护一个队列,发送请求时,将请求加入队列,请求响应后,从队列中清除,这就保证了在任一时刻只能有一个同样的请求发送.
    • 因为使用的是jquery的ajaxPreFilter函数,仅仅对jquery的ajax请求有作用
    • 目前type属性的值依旧还是text/javascript。不过,这个属性并不是必需的,如果没有指定这个属性,则其默认值仍为text/javascript
      • 并不是必须的,可以留空,默认值为text/javascript
    • 记住不要在代码中的任何地方出现"</script>"字符串
      • 通过转义字符‘/’解决这个问题
    • 如果要通过<script>元素来包含外部JavaScript文件,那么src属性就是必需的
    • 浏览器不会检查包含JavaScript的文件的扩展名
      • 所以JavaScript代码由后台语言动态生成,指要确保返回的是哪种MIME即可
    • 嵌入的代码会被忽略
      • 如果是带有src属性的<script>元素之间嵌入代码会被忽略
    • 只要不存在deferasync属性,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析
      • 浏览器遇到body>标签时才开始显示内容这种写法意味着要等到全部的JavaScript代码都加载-解析-运行完成后才会呈现页面上的内容
    • 为了避免这个问题,现代Web应用程序一般都把全部JavaScript引用放在<body>元素中页面内容的后面,
      • 这样子在解析包含的JavaScript代码之前,页面就不会出现空白页等待了
    • 这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。
      • defer属性,立即下载,延迟执行
    • HTML5规范要求脚本按照它们出现的先后顺序执行
    • 在现实当中,延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行
    • ,因此最好只包含一个延迟脚本
    • defer属性只适用于外部脚本文件
    • 忽略给嵌入脚本设置的defer属性
    • 为此,把延迟脚本放在页面底部仍然是最佳选择
    • 只适用于外部脚本文件,并告诉浏览器立即下载文件
    • 并不保证按照指定它们的先后顺序执行
    • 建议异步脚本不要在加载期间修改DOM
      • 一般都是一些统计类的JavaScript代码才采用,要保证不操作DOM

Posted from Diigo. The rest of my favorite links are here.

2016年10月7日星期五

Google Blog 10/07/2016 (p.m.)

    • Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
    • 每次使用时间不能超过 30 分钟,并且启动时将会有 10 秒种的延时
      • 良心
    • 创建完成后需要调用show方法才能将Webview窗口显示出来
    • 为了保持窗口标识的唯一性,应该避免使用相同的标识来创建多个Webview窗口
      • 也就是说可以创建多个同样id的webView
    • 若存在多个相同标识的Webview窗口,则返回第一个创建的Webview窗口
    • 将需要滚动的区域通过单独的webview实现,完全使用原生滚动

Posted from Diigo. The rest of my favorite links are here.

2016年10月6日星期四

Google Blog 10/07/2016 (a.m.)

    • 每一次 commit 都可以选择性的与某个 issue 关联。比如在 message 中添加 #n,就可以与第 n 个 issue 进行关联
      • fix #n 会自动关闭第n个issue
    • DOM 事件深入浅出(一) - 简书
    • DOM事件分为3个级别:DOM0级事件处理,DOM2级事件处理和DOM3级事件处理
    • DOM级别一共可以分为4个级别:DOM0级,DOM1级,DOM2级和 DOM3级
    • 因为1级DOM标准中并没有定义事件
    • 最大的缺点就是HTML于JS强耦合
      • 最原始的事件处理方式_HTML事件处理程序
    • 优点是不需要操作DOM来完成事件的绑定。
      • 最原始的事件处理方式_HTML事件处理程序
    • DOM0级事件就是将一个函数赋值给一个事件处理属性
    • DOM0级处理事件的体现。我们可以通过给事件处理属性赋值null来解绑事件
      • DOM0级事件处理_优点
    • 一个处理程序无法同时绑定多个处理函数
      • DOM0级事件处理_缺点
    • DOM2级事件定义了addEventListener和removeEventListener两个方法,分别用来绑定和解绑事件
    • 需要注意的是IE8级以下版本不支持addEventListener和removeEventListener,需要用attachEvent和detachEvent来实现
      • IE8-不支持addEventListener&&removeEventListener
    • 不需要传入第三个参数,因为IE8级以下版本只支持冒泡型事件。
    • DOM3级事件也允许使用者自定义一些事件
    • e.stopPropagation();
      • 阻止事件继续冒泡
    • 事件冒泡相反,事件捕获是自上而下执行,我们只需要将addEventListener的第三个参数改为true

Posted from Diigo. The rest of my favorite links are here.

Google Blog 10/06/2016 (p.m.)

    • App升级无法更新应用图标及splash图,此时必须采用整包(apk/ipa)升级才行
    • 关于iOS没有更新的问题,是UIWebview页面css文件缓存导致的,可以临时采用文件后加个随机参数
    • 户啊来模拟pullRequest,pullRequest这个你不能从字面上来理解,很容易误导人。它的意思是请求 对方(主仓库方)接受您的请求(改动的代码)
    • 不但可以查看代码的差别,还有多种方法供用户查看图片的差别
    • 因此我们需要创建一个分支,用来模拟采纳 Pull Request 后的状态
      • 创建用于检查的分支
    • 点击 Merge pull request 按钮,随后 Pull Request 的内容会自动合并至仓库
    • 通过 CLI 进行合并操作再 push 至 GitHub
    • 用这种方法处理后,仓库的 Pull Request 会自动从 Open 状态变为 Close 状态
    • Pull Request 是自己修改源代码后,请求对方仓库采纳该修改时采取的一种行为
      • Pull Request 在网络上也常常被简称为 PR。
    • 各位请养成创建特性分支后再修改代码的好习惯。
    • 下面就让我们学习如何让仓库保持最新状态。
    • 所以我们需要将原仓库设置为远程仓库,从该仓库获取(fetch)数据与本地仓库进行合并(merge),让本地仓库的源代码保持最新状态
      • 下面介绍fork来的仓库如何保持最新
    • 给原仓库设置 upstream 的名称,将其作为远程仓库
      • 关键步骤,连接到原来的仓库,就可以fetch了

Posted from Diigo. The rest of my favorite links are here.

2016年10月5日星期三

Google Blog 10/06/2016 (a.m.)

    • 有两种类型的引擎:文本导向(text-directed)的引擎和正则导向(regex-directed)的引擎
      • 正则表达式解析引擎有两种,分别是DFA与NFADFA:确定有限状态自动机NFA:非确定有限状态自动机
    • 如“惰性”量词(lazy quantifiers)和反向引用(backreferences),只能在正则导向的引擎中实现
    • 正则导向的引擎是“猴急”的,它会很急切的进行表功,报告它找到的第一个匹配
      • 这么说,JavaScript也是正则导向的
    • <<q[^u]>>并不意味着:匹配一个q,后面没有u跟着。它意味着:匹配一个q,后面跟着一个不是u的字符。所以它不会匹配“Iraq”中的q,而会匹配“Iraq is a country”中的q和一个空格符。
      • 事实上,空格符是匹配中的一部分,因为它是一个“不是u的字符”。
    • 字符集中只有4 字符具有特殊含义。它们是:“] \ ^ -”。“]”代表字符集定义的结束;“\”代表转义;“^”代表取反;“-”代表范围定义
      • + * 等等等没有特殊含义 可以不转义就直接使用

Posted from Diigo. The rest of my favorite links are here.