tag:blogger.com,1999:blog-35170206561604908832024-03-14T03:37:18.116+08:00小胡子哥的个人网站本博客内容为 http://barretlee.com 内容的镜像。Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.comBlogger42125tag:blogger.com,1999:blog-3517020656160490883.post-18873404826112935292016-09-27T13:04:00.001+08:002016-09-27T13:04:17.090+08:00如何做好一名实习生最近看到有几个同事准备着转正,想借此机会聊一下实习生相关的话题——如何成为一名优秀的实习生。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/09/27/how-to-be-a-excellent-intern/">http://www.barretlee.com/blog/2016/09/27/how-to-be-a-excellent-intern/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-48970845408918924092016-08-25T15:32:00.001+08:002016-08-25T15:32:13.412+08:00详解代理自动配置 PACPAC,一个自动代理配置脚本,包含了很多使用 JavaScript 编写的规则,它能够决定网络流量走默认通道还是代理服务器通道,控制的流量类型包括:HTTP、HTTPS 和 FTP。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/08/25/pac-file/">http://www.barretlee.com/blog/2016/08/25/pac-file/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-70354675129098548202016-08-25T01:47:00.001+08:002016-08-25T01:47:25.978+08:00详解代理自动配置 PACPAC,一个自动代理配置脚本,包含了很多使用 JavaScript 编写的规则,它能够决定网络流量走默认通道还是代理服务器通道,控制的流量类型包括:HTTP、HTTPS 和 FTP。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="//www.barretlee.com/blog/2016/08/25/pac-file/">//www.barretlee.com/blog/2016/08/25/pac-file/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-74402267450972415182016-08-23T18:54:00.001+08:002016-08-23T18:54:10.393+08:00构建一个安全的 JavaScript 沙箱灵活是 Javascript 这门语言的特性,也是它难以被掌控的主要原因,这点可以从文中各种沙箱逃逸方式就能看出。ES6 提供了很多新的特性,本文以沙箱为切入点,带着大家学习了几个函数和属性,希望读者有些收获。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="//www.barretlee.com/blog/2016/08/23/javascript-sandbox/">//www.barretlee.com/blog/2016/08/23/javascript-sandbox/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-38000478204151397772016-08-23T02:54:00.001+08:002016-08-23T02:54:20.793+08:00构建一个安全的 JavaScript 沙箱灵活是 Javascript 这门语言的特性,也是它难以被掌控的主要原因,这点可以从文中各种沙箱逃逸方式就能看出。ES6 提供了很多新的特性,本文以沙箱为切入点,带着大家学习了几个函数和属性,希望读者有些收获。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/08/23/javascript-sandbox/">http://www.barretlee.com/blog/2016/08/23/javascript-sandbox/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-58779970161402621292016-08-11T20:48:00.001+08:002016-08-11T20:48:14.878+08:00聊一聊排序算法两月前花了些时间,将大学里学过的排序算法都复习了一遍,代码放在 github 上。没有整理,今天翻了翻代码,重新 review 了一遍,也顺便做了点记录。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="//www.barretlee.com/blog/2016/08/11/algorithms-of-sort/">//www.barretlee.com/blog/2016/08/11/algorithms-of-sort/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-85705869472092420722016-08-05T12:56:00.001+08:002016-08-05T12:56:19.006+08:00有意思的 git-log之前写过几篇 git 相关的文章,内容很基础,但发现最近被搜索引擎检索的量还比较大,最近正好在阅读 git 相关的资料,准备将不错的几个点,详细地说一说,记录下来写出来分享给大家。今天要说的便是常用的 `git log` 命令。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="//www.barretlee.com/blog/2016/08/04/funning-gitlog/">//www.barretlee.com/blog/2016/08/04/funning-gitlog/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-54403299237988880592016-08-03T22:24:00.001+08:002016-08-03T22:24:48.657+08:00Shadowsocks 原理简介及安装指南对 Shadowsocks 早有耳闻,当时我还在用 HTTP 代理、VPN 服务等翻墙,感觉它是个比较高大上的东西,也一直没有碰它。最近 GreenVPN 抽风,Mac 一直连接不上,害得我折腾了很久,最后还是买了一台国外的 VPS,于是开始折腾起 Shadowsocks,部署之前,对它做了一个简单的了解,下面先介绍下。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="//www.barretlee.com/blog/2016/08/03/shadowsocks/">//www.barretlee.com/blog/2016/08/03/shadowsocks/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-79853433867995704372016-08-02T13:41:00.001+08:002016-08-02T13:41:29.299+08:00入 linode 之前之前购买的 GreenVPN 最近死活越不了墙,在阿里云上尝试用 wget 下载资源,貌似能够连接上。于是尝试在阿里云上配置 shadowsocks,配置时提示需要使用 pip,而使用 pip 就得升级 Python(≥2.6),折腾了一番,升级了 Python 也安装了 pip,最后却发现下载速度奇慢。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="//www.barretlee.com/blog/2016/08/02/before-purchase-linode/">//www.barretlee.com/blog/2016/08/02/before-purchase-linode/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-12048655755875514862016-07-26T11:24:00.001+08:002016-07-26T11:24:28.472+08:00工作五年,后面四年重复着第一年的活儿?当我们沉浸在旺盛的需求之中时,整个人便会成为一台工作的机器,切着类似的页面,写着同样的逻辑,重复着昨天或者上个月做的事情,时间久了,觉得腻味,没有什么创新,也没有明显的成长。用一句通俗的话来讲:工作五年,后面四年重复着第一年的活儿。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="//www.barretlee.com/blog/2016/07/21/donnot-repeat-yourself/">//www.barretlee.com/blog/2016/07/21/donnot-repeat-yourself/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-27980405910041293702016-07-21T23:04:00.001+08:002016-07-21T23:04:03.207+08:00工作五年,后面四年重复着第一年的活儿?当我们沉浸在旺盛的需求之中时,整个人便会成为一台工作的机器,切着类似的页面,写着同样的逻辑,重复着昨天或者上个月做的事情,时间久了,觉得腻味,没有什么创新,也没有明显的成长。用一句通俗的话来讲:工作五年,后面四年重复着第一年的活儿。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/07/21/donnot-repeat-yourself/">http://www.barretlee.com/blog/2016/07/21/donnot-repeat-yourself/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-50697700192084452062016-07-14T10:18:00.001+08:002016-07-14T10:18:17.392+08:00向小胡子哥提问欢迎向小胡子哥提问,由于个人精力有限,并不是每一个问题都会去回答。但是你可以这么做。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/07/14/question-and-answer/">http://www.barretlee.com/blog/2016/07/14/question-and-answer/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-18549482293545735862016-07-14T00:05:00.001+08:002016-07-14T00:05:29.491+08:00在公众号中优雅地呈现代码这几天有不少朋友在我的微信公众号留言,问我是如何在公众号页面中整齐摆放代码的,今天就分享下我的方法,事实上我也折腾了好一会儿。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/07/14/codes-in-wechat/">http://www.barretlee.com/blog/2016/07/14/codes-in-wechat/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-7287026124372706512016-07-13T22:19:00.001+08:002016-07-13T22:19:51.776+08:00我需要学习 ECMAScript 6 么?前几天翻译了一篇 ECMAScript 6 的入门文章,看到几则评论说 JavaScript 越来越像 Java 了,我暗暗地笑了笑。也有同学很疑惑是否有必要学习 ES6,使用 TypeScript 的同学也有类似的疑惑。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/07/13/why-i-learning-es6/">http://www.barretlee.com/blog/2016/07/13/why-i-learning-es6/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-13705022200532918472016-07-11T03:00:00.001+08:002016-07-11T03:00:51.185+08:00谈谈我这三年在技术上的成长前些时候把微信 id 开放了出去,有很多朋友加我微信,其中大部分都是前端学习者。一些同学在学习的时候遇到了困难,或者说瓶颈吧,询问我处理办法,有的希望我讲述下学习经验。考虑到有些话题偏大,我没有详细回复,事实上我也不知道从何说起,今天思量了一番,记录下来。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/07/11/learning-recent-years/">http://www.barretlee.com/blog/2016/07/11/learning-recent-years/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-88522729577146665632016-07-09T16:26:00.001+08:002016-07-09T16:26:29.406+08:00ECMAScript 6 扫盲ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中绝大多数的特性。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/07/09/a-kickstarter-guide-to-writing-es6/">http://www.barretlee.com/blog/2016/07/09/a-kickstarter-guide-to-writing-es6/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-23425071793253152822016-07-07T21:10:00.001+08:002016-07-07T21:10:33.526+08:00招行香港一卡通办理和使用最近办了一张招行香港一卡通,流程比较长,遇到的问题也很多,趁着自己还记得比较清楚,写下来备忘。<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/07/07/hongkong-cmbchina/">http://www.barretlee.com/blog/2016/07/07/hongkong-cmbchina/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-35649477919604945242016-06-13T00:33:00.001+08:002016-06-13T00:33:22.783+08:00谈一谈越来越难做的前端<p>我接触前端的时间不长也不短,13 年入门,14 年初在百度实习,14 中正式参加工作,掐指一算 4 年整。然而这四年间前端的变化已经让很多人摸不着头脑。</p>
<a id="more" name="more"></a>
<p>昨天还发了一条状态,<a href="http://weibo.com/1812166904/DzM0s3RAu" target="_blank" rel="external">调侃 jQuery 是一个坚韧的社区</a>,有人留言问我为什么这么说。</p>
<p>记得刚入前端这个坑时,jQuery 异常火爆,图书馆的相关书籍俯拾皆是,博客园上的文章介绍多若繁星,jQuery 插件铺天盖地,可谓盛况空前。然而,随着多端设备的兴起和界面需求的不断强盛,jQuery 几乎已经不能胜任日常开发了,时常会在加载缓慢的页面上看到一堆性能低下的 jQuery 组件,被胡乱地拼凑到一起,那场面,就像进入了一间很久没有打扫过的屋子,弥散着臭味和灰尘。</p>
<p>前端是一个喜欢发明问题和解决问题的物种,它干着杂乱无章的活儿,却又在用户的视角前凸显自己整洁。从缤纷的组件,到工程化、组件化,再到模块化,然后回归到语言本身的进化,紧接着又是一轮新的变革。技术在变,社区也在变,社区只是技术演变的一个容器,技术的终点是回归业务。</p>
<p>业务中出来的问题太多,而解决问题的方案则更多,每隔一小段时间前端就会突然蹦出几个新鲜的名词。把单词拆开来看每个字母都认识,但拼凑到一块儿,就只能眼睛瞪鼻子了。不管我们使出多少气力,投入多少时间,新的技术总是学不完,也学不通透,学透了却发现没有实践的场景。于是越来越多前端开始彷徨,“我是不是跑偏了?”,“这玩意儿要不要学?”,“这技术刚听说怎么就被淘汰了?”,“怎么出去旅个游回来感觉落后了半个世纪?”。</p>
<p>对,这就是前端圈子的现状。五年前,你可以说搞前端的很肤浅,而今天——你依然可以这么说🙈——前端的知识体量上升了一个台阶,但我们做的事情依然没变,切!页!面!只是我们发明了更多更丰富的切页面工具,让运营帮我们切,让程序帮我们切,让机器帮我们切。</p>
<p>在切页面的同时,我们的职能也发生了一些改变,我们需要掌握更多的工具和更多的语言,从客户端延伸到了服务端甚至运维层面,从前端资源演变成了产品的主导者,带着运营和产品经理玩游戏,我们甚至可以提供玩法,他们跳进来玩耍。</p>
<p>前端这几年变得丰满了许多,可以深入的方向更多了。无线、工程化、Node、类 React、模块化、工程化等等,开始出现了「前端领域」这个概念,它不再是笼统的 HTML/CSS/JavaScript 杂烩,每个领域都有专家,每个领域都有自己的研究方法。所以前端也出现了很多的机会,以及更多的趣味性——事实上,前端那种所见即所得的开发,本身就是一种趣味。</p>
<p>也有很多人不断地为前端圈地盘,在知识边界上开疆拓土,如 Docker、HTTPS、自动化、运维等等,甚至直接跨端跨界跨语言与其他方向擦出奇妙的火花。</p>
<p>前端演变很快很剧烈,找到自己的一席之地很重要。</p>
<p>那么文章的最后,抛出一串问题,在漫漫前端的发展史上,你经历过哪些?你学到了哪些?你属于哪个层级?你将要去哪里?</p>
<p>但愿你已经找到了自己的一席之地。</p>
<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/06/13/talk-about-front-end/">http://www.barretlee.com/blog/2016/06/13/talk-about-front-end/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-89872647916487585662016-06-02T15:11:00.001+08:002016-06-02T15:11:18.424+08:00聊一聊淘宝首页和它背后的一套Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-59754133420350451792016-05-30T12:50:00.001+08:002016-05-30T12:50:00.585+08:00H5 Crash 研究Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-26454067758587132842016-05-20T18:07:00.001+08:002016-05-20T18:07:45.395+08:00Kindle 电子书生成工具Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-65162983363820428052016-04-28T20:53:00.001+08:002016-04-28T20:53:41.396+08:00JavaScript 代码执行效率对比工具Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-42576085213733581002016-04-28T13:03:00.001+08:002016-04-28T13:03:34.611+08:00元素选择器 - Mini QueryAnonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-72903684980073817882016-04-24T01:39:00.001+08:002016-04-24T01:39:46.484+08:00细说 CA 和证书Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0tag:blogger.com,1999:blog-3517020656160490883.post-78381069086106300192016-04-18T01:52:00.001+08:002016-04-18T01:52:46.170+08:00JavaScript 被忽视的细节<p>《JavaScript 权威指南》这本书从第四版开始,一直到第六版,每个版本我都逐字逐句读过几遍,然而每一遍下来的感受却完全不一样。上上周的周一,再次翻开了这本犀牛书,这一次我是带着批判精神和研究精神过来的,所以看的时候也写下了一些感受和笔记,都是些容易被忽略的点,部分内容犀牛书上不一定有提到。</p>
<p>之前都发在 <a href="http://weibo.com/hustskyking" target="_blank" rel="external">微博</a> 上,稍微整理了一番,放在这里,方便阅读。</p>
<a id="more" name="more"></a>
<h3 id="一些小点">一些小点</h3>
<p><strong>语句/表达式</strong></p>
<p>换个角度理解语句(statemaents)和表达式(expressions):表达式不会改变程序的运行状态,而语句会。还有一种叫做表达式语句,可以理解为表达式和语句的交集,如 <code>({a:1})</code>、<code>"use strict;"</code>等,我觉得没必要死扣,意义不大。</p>
<p><strong>字符集</strong></p>
<p>ES3 要求 JS 必须实现 Unicode 2.1 及后续版本,而 ES5 只要求支持 Unicode 3 及后续版本。Unicode 字符 2005 年超过了十万字符,至今仍在不断增修,最新版本是 8.0。</p>
<p><strong>分号</strong></p>
<p>如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 “(“、”[“ 、”/“、”+”、”-“ 开头的语句前面都加上一个分号,如 <code>;(a + b).toString()</code>。</p>
<p><strong>进制</strong></p>
<p>ES5 严格模式中禁止使用八进制。目前各种引擎对 JS 的实现是存在差异的,部分支持八进制,部分不支持。八进制被禁止的原因:String 和 Number 之间经常被相互转换,而以 <code>0</code> 开头的八进制数据特别容易让人迷惑,也容易让机器迷惑,比如 <code>09</code> 是该被转换成 9 还是直接报错?十六进制不存在这个问题,如 0x98。更多信息参阅 <a href="http://stackoverflow.com/questions/30386993/why-in-javascript-does-10-010-result-in-false" target="_blank" rel="external">这里</a>。</p>
<p><strong>精度</strong></p>
<p>JS 采用 IEEE-754 浮点数表示法,这是一种二进制表示法,由于精度原因 JS 不能表示所有的实数。它能展示的浮点数个数是有限的,比如它不能准确地表示三分之一的数值字面量。这也导致了它在浮点数的计算上存在误差,如 <code>0.3-0.2 != 0.2-0.1</code>,因为在计算的过程中,存在数据的溢出,丢失了精度。</p>
<p><img src="http://ww4.sinaimg.cn/mw1024/6c0378f8jw1f2l0dtvbzuj20ek07ogm7.jpg" alt="" /></p>
<p><strong>null/undefined</strong></p>
<p>系统级、出乎意料的或者类似错误的值的空缺使用 undefined,而程序级、正常的或意料之中的值的空缺使用 null。平时编程给变量赋值时,不要使用 undefined 而应该用 null。值得注意的是 ES3 中的 undefined 是可以被重新赋值的,ES5 修复了这个 bug。通常我们使用 void 0 来还原/代替 undefined 的值。</p>
<p><strong>eval</strong></p>
<p>eval 是个不好把握的东西,它在 ES3 中更像是 Function,而在 ES5 中更像是一个运算符(严格模式下不允许设置别名,否则报错,且将其作为保留字)。实际上 ES3 中也不允许给 eval 设置别名,然而很多实现却依然允许,并将其作为全局代码来执行,浏览器尤其是 IE 对它实现相当混乱,没有什么规律可循,不过 IE 中提供了一个 execScript 函数,类似全局的 eval,这个函数每次执行都会返回 null。</p>
<p>需要使用 eval 的场景并不多,尽量少用,一般需求使用 new Function 就能满足。</p>
<p><strong>引用</strong></p>
<p>删除属性存在的坑:<code>a = {n: {x: 2}}, b = a.n; delete a.n;</code> 这段代码执行之后,b.x 依然等于 2,原因是 {x:2} 这个对象被 a 和 b 同时引用,delete 指令只删除了 a 对它的引用,b 上的引用依然存在。这种问题有可能造成内存泄漏。</p>
<p><strong>Object 扩展</strong></p>
<p>Object 的 freeze 方法过于严格;<strong>defineGetter</strong>/<strong>lookupGetter</strong> 和对应的 Setter 是很好用的属性。</p>
<p><img src="http://ww3.sinaimg.cn/mw1024/6c0378f8gw1f2rzy2ncrpj20eo09b3zr.jpg" alt="" /></p>
<p><strong>toLocalString</strong></p>
<p>如图,你可能还不知道 JavaScript 的 toLocaleString 还可以这么玩。</p>
<p><img src="http://ww4.sinaimg.cn/mw1024/6c0378f8gw1f2s12nir33j20bz05n750.jpg" alt="" /></p>
<p><strong>this语义</strong></p>
<p>this 上下文只存在两种语义,一种是被当作方法调用,this 指向调用它的对象;一种是作为函数调用,指向 Global 对象(严格模式下为 undefined)。它没有作用域的限制,如下图所示,a 由于是作为函数被调用,所以它指向的是 window,故而返回 false。</p>
<p><img src="http://ww1.sinaimg.cn/mw1024/6c0378f8gw1f2t6g4sc28j208m054aa5.jpg" alt="" /></p>
<p><strong>类型</strong></p>
<p>JavaScript 可以被调用执行的均为 Function 类型,但是也存在可调用的 Object,如低版本 IE 中的一些宿主对象:document.getElementById、alert 等,在很多浏览器中 typeof RegExp 同样是 Object。这绝对是一个不标准的实现,在浏览器摒弃/修正这些错误类型之前应该尽量少依赖它们。</p>
<p><img src="http://ww4.sinaimg.cn/mw1024/6c0378f8gw1f2uaewdsbmj20hq03zgm5.jpg" alt="" /></p>
<p><strong>IE8 getter/setter</strong></p>
<p>Object.defineProperty 虽然是 ES5 的东西,早在 IE8 就已经支持了,但支持得并不完善,比如 writable、enumerable、configurable 这些配置项设置就无效,IE8 下主要支持 getter/setter。</p>
<p><img src="http://ww4.sinaimg.cn/mw1024/6c0378f8gw1f2ubot1qvxj20ie0dh41g.jpg" alt="" /></p>
<p><strong>JSON.stringify</strong></p>
<p>JSON.stringify 接受三个参数,很多人都知道第三个参数可以设置空白字符来美化输出,但是你可能不知道第二个参数的作用,它为 {Array|Function} 类型,如果为 Array 则用于过滤 key,如果为 Function 则可以对 value 做处理,如图所示。</p>
<p><img src="http://ww1.sinaimg.cn/mw1024/6c0378f8gw1f2ud4j7vg2j20ec0dmjso.jpg" alt="" /></p>
<p><strong>Symbol</strong></p>
<p>ES6 中添加了一种新的数据类型,Symbol,它是一种原始数据类型(图一),具备对象的特性(图二),并可以指向同一个引用(图三),能够作为对象的 key 但不可枚举(图四),内置的 Symbol 会影响程序的执行(图五),Symbol.iterator 是个举足轻重的符号,能够让元素具备迭代属性(图六),花样很多。</p>
<p>附图见:<a href="http://weibo.com/1812166904/DqMwR8O6z" target="_blank" rel="external">http://weibo.com/1812166904/DqMwR8O6z</a></p>
<p>伪数组添加 Symbol.iterator 的几个办法:鸭式辨型的 iterator 函数、yield 函数和直接使用 Array 的遍历符号。</p>
<p>附图见:<a href="http://weibo.com/1812166904/DqMBYebPw" target="_blank" rel="external">http://weibo.com/1812166904/DqMBYebPw</a></p>
<p><strong>Set/WeakSet</strong></p>
<p>Set/WeakSet 这种数据结构,不能说没用,但确实也没啥大用,前者就是个不允许出现重复成员的数组,顺便还带了点 ES6 的特性,后者虽说可以一定程度上防止内存泄漏,但是也容易出错,比如某个引用已经被垃圾回收了,再去使用它可能就返回 null。它们都是 ES6 的配套产物。而 Map/WeakMap 倒是两个非常不错的设计,常规的 Object 结构都为 String-Val 键值对,而它扩展为 AllType-Val,任意类型都可以作为它的 Key,无论是服务端编程还是客户端编程,这个属性都带来了极大的便利性。</p>
<p><img src="http://ww1.sinaimg.cn/mw1024/6c0378f8gw1f2w362q57jj207203jaa1.jpg" alt="" /></p>
<p><strong>正则</strong></p>
<p>理解正则零宽的含义:正则中所谓的零宽断言,类似于锚点字符,它们匹配指定的位置而不会匹配内容,如 ^ 匹配开头,$ 匹配结尾,\b 匹配单词边界;(?=p) 匹配「接下来的字符与 p 匹配」的位置,(?!p) 匹配「接下来的字符不与 p 匹配」的位置。\b 字符匹配单词边界,实际上就是匹配 \w 与 \W 之间的位置(\w 匹配 [a-zA-Z0-9])。很少会有人用到 \B,它匹配的是非单词边界位置,简单理解就是 \w & \w 之间位置或者 \W & \W 之间位置。</p>
<p><img src="http://ww3.sinaimg.cn/mw1024/6c0378f8gw1f305w4ur27j208v02wmx9.jpg" alt="" /></p>
<p><strong>持续学习和分享…</strong></p>
<p>内容都是片段化的分享,比较多,也比较杂,就没有全部列举出来,感兴趣的同学可以 follow 我的 <a href="http://weibo.com/hustskyking" target="_blank" rel="external">微博</a>,我的想法和笔记都会在上面同步。</p>
<h3 id="感受">感受</h3>
<p>在这之前犀牛书已经翻阅了差不多六七遍,很多内容都已经深深地刻在了脑海里,但时间久了也会忘记些,时而巩固复习下,毕竟是前端最基础部分。</p>
<p>带着问题去看书,收获是完全不一样的。犀牛书不难啃,难的是你对这些知识点的理解深度。</p>
<br />
<br />
本文同步自 小胡子哥的个人网站,原文地址: <a href="http://www.barretlee.com/blog/2016/04/18/javascript-detail/">http://www.barretlee.com/blog/2016/04/18/javascript-detail/</a><br />
Anonymoushttp://www.blogger.com/profile/08961141242356352145noreply@blogger.com0