摘要:
SHLVL 环境变量代表 Shell 嵌套执行的深度。$ echo $SHLVL1$ bash$ echo $SHLVL2$ bash$ echo $SHLVL3在 Bash 里,这个值的范围是 [0, 1000],0 是怎么来的呢?是在上次的 SHLVL 值为负数的时候:$ SHLVL=-1$ b... 阅读全文
摘要:
$_ 有好几个功能,我们最常用的是用它来获取“刚刚执行过的命令的最后一个参数”这个功能,比如下面这样:$ ls ~/Downloads/very/long/dir/ # ls 到某个目录看看有没有我们想要的文件file1 file2 needed_file$ cd $_ # 如果有,就进入到那个文件... 阅读全文
摘要:
首先,我们想到的会是 export(等价于 declare -x)命令:$ export | grep 'declare -x _='没有找到,那么结论就是 _ 不是环境变量?当然没那么简单,否则本篇文章就该结束了。别忘了还有 env(或者 printenv)命令:$ env | grep '_='... 阅读全文
摘要:
我们知道,在 Shell 中,一个变量在被展开后,如果它没有被双引号包围起来,那么它展开后的值还会进行一次分词(word splitting,或者叫拆词,分词这个术语已经被搜索引擎相关技术占用了)操作,分成几个词,传给命令的就是几个单独的参数。举个例子,比如:$ foo="1 2 3"$how_ma... 阅读全文
摘要:
在 Bash 里,一共有五个地方支持反斜杠开头的转义序列,包括两个内部命令 echo 和 printf 的参数里,字符串语法 $'...' 里,还有四个提示符变量 PS1-PS4 里,以及在 Readline 配置文件里(用来自定义键盘快捷键)。其中后两者不在本文的讨论范围内,我们只看看前三个命令/... 阅读全文
摘要:
原文:http://whereswalden.com/2013/08/12/micro-feature-from-es6-now-in-firefox-aurora-and-nightly-binary-and-octal-numbers/几年前,当SpiderMonkey实现了严格模式的时候.我了解到,严格模式禁用了八进制整数字面量的写法.因为有证据表明,一些新手会利用前导0来对齐多行中的数字,从而导致意想不到的结果:var sum = 015 + // 相当于十进制的13,而不是15 197 + 001; // 反正是1console.log(su... 阅读全文
摘要:
原文:http://fiddler2.com/blog/blog/2013/02/13/understanding-the-request-line最近有一位Fiddler用户问我一个问题:我在使用Fiddler查看HTTP请求的时候发现Raw和HexView两个面板中显示的数据有点小区别,比如当我请求www.microsoft.com时,Raw面板中的数据是这样的: GEThttp://www.microsoft.com/ HTTP/1.1 ... Host: www.microsoft.com而HexView面板中是这样的: GET / HTTP/1.1 ... Host: www.mic 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2013/06/javascript-source-transformation-non-destructive-vs-regenerative.html很多的JavaScript工具都需要对JavaScript源码进行转换,包括压缩器(minifier)和转译器(transpiler).这些工具所使用的转换的技术可以分为两种:对源码进行非破坏式的(non-destructive)修改和从语法树完全再生(full regeneration)出新的源码.这两种技术服务于不同的需求,且往往是相辅相成的.无论选择哪种技术,输入的源码都需要先被解 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2013/07/es6-and-proxy.html能够拦截在一个对象上的指定操作的能力是非常有用的,尤其是在故障调试的时候.通过ECMAScript 6中的新特性——代理(proxy),这种能力才最终得以实现.在目前最新的ES6规范草案中(2013年5月14日发布,第15次修订版),第15.18小节——代理对象(Proxy Objects)这部分的文档仍然是空的.不过随着规范的日趋稳定,这里会补充上完整的参考文档的.目前,可以在ES wiki上的直接代理(Direct Proxies)页面内找到最详细的资料.在我写这篇文章的时候,只有F 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2012/02/from-double-quotes-to-single-quotes.html代码的不一致性总是让人发狂,如果每位开发者都能遵守约定好的编码规范(coding conventions),那么生活将变的更加美好.比如在JavaScript中,一个字符串字面量可以用单引号引起,也可以用双引号来引起(ECMAScript 5规范7.8.4小节).很多人习惯于使用某种特定的引号,比如jQuery编码风格推荐人们使用双引号.但我个人更喜欢使用单引号,这仅仅是我的偏好.自从有了Esprima,我意识到,我可以利用Esprima能够以 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2012/07/lazy-parsing-in-javascript-engines.html现代的JavaScript引擎可以将函数体的解析操作延迟到真正需要的时候再进行,下面我将讲一下为什么要这样做以及引擎具体是如何实现的.IE团队在最近的一篇博文"IE10和Windows 8中JavaScript性能的发展"中提到了他们使用延迟解析来提升IE10的性能.实际上,IE9正式版已经实现了这种优化手段,只不过IE10更进一步改进了它.文中有这样一句话(其中Chakra是IE的JavaScript引擎的名字):为了进一步 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2013/04/web-page-clipping-with-phantomjs.htmlPhantomJS的一个主要用途就是用来抓取网页并将它渲染成图片.在渲染图片时有很多选项可供调整,其中最常用的一个就是缩放选项(调整zoomFactor属性的值),它经常会被用在制作缩略图的场景下.另外一个不怎么被人熟知的选项就是"按指定矩形区域渲染"选项(调整clipRect属性的值),也就是生成的图片只包含了目标网页中被指定的那部分区域.这种只渲染页面指定矩形区域的需求通常表现为你只想获取页面中某个特定元素的内容(就像getB 阅读全文
摘要:
原文:http://generatedcontent.org/post/47216611856/ie11最近,一个开发代号为Windows Blue的Windows操作系统泄漏到了互联网上,该操作系统的内置浏览器为IE11,本文将介绍一下这个泄漏版的IE11中有哪些关键的新变化和新特性.预先声明: 本文中所讲的内容都来自互联网,我自己没有安装过这个泄漏版的IE11,虽然我目前正在帮助微软的userAgents社区做一些工作,但我没有任何关于IE11未来计划的内部消息,本文只是对网上的那些消息做了一下总结,并加入了自己的看法和预测.一个新的身份标识关于IE11的第一个新闻就是它有了一个新的用户代 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2013/03/es6-and-method-definitions.html在JavaScript的对象字面量中,属性值被设置成为一个函数是个很常见的做法.在各种JavaScript框架中,这种做法也很常见,尤其是用来设置构造函数的prototype属性对象的时候.在即将到来的ECMAScript 6中,引入了一种名叫方法定义(method definition)的新语法糖,相对于以前的完整写法,这种简写形式可以让你少写一个function键字.在介绍"方法定义"之前,让我们快速的回顾一下访问器属性.访问器属性是个可 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2013/04/automatic-inlining-in-javascript-engines.html想当年,在JavaScript解释器的运行速度还很慢的时候,有一条最佳实践就是"不要在性能关键(performance-critical)的代码中使用函数调用".随着最近现代JavaScript引擎的不断发展,这条最佳实践变的不是那么必要了.其中,能在很大程度上减少我们对"频繁的函数调用会消耗过多性能"的担心的一个新特性就是自动函数内联(automatic function inlining). 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2013/04/css-preload-scanner-in-webkit.html在WebKit中,预加载扫描器指的是一个副解析器,当HTML主解析器被一个同步的script标签阻塞时,预加载扫描器就会启动.然后,它会马上找出接下来即将需要获取的资源(比如样式表,脚本,图片等资源)的URL,然后尽可能早的发起网络请求,而不用等到主解析器恢复运行,从而提高了整体的加载时间.那么,除了HTML文件中的依赖资源,还有样式表中的呢?幸运的是,WebKit已经有了一个叫CSS预加载扫描器的东西了.在WebKit实现符合HTML5标准的解析器的时候 阅读全文
摘要:
原文:http://domenic.me/2013/03/19/strict-mode-static-scoping/现在的确是时候使用JavaScript的严格模式了.之所以这么说,是因为使用严格模式的确能带来很多好处,其中最能说服我(使用严格模式)的一点就是:严格模式可以通过确保脚本的静态作用域来让JavaScript的作用域机制更加合理.简单来说,如果代码的作用域是静态的,那么你就可以通过静态分析来判断出代码中每个标识符真正指向的是哪个值.换句话说,就是静态作用域能够让你知道每个变量是在代码的哪个部位声明的.正如我们下面要讲的,JavaScript的非严格模式不能保证这一点,这就给了我们 阅读全文
摘要:
原文:http://ariya.ofilabs.com/2013/02/es6-and-object-literal-property-value-shorthand.html使用字面量语法来构建对象是每个JavaScript开发者都非常熟悉的,尤其还因为这种写法和JSON的语法非常相似.在对象子面量中,每个对象属性可以由一个键值对或者由一对getter/setter组成,但这样的写法可能会发生变化.ECMAScript 6中新增的一种语法糖称为对象字面量中的属性值简写(object literal property value shorthand).考虑下面的ECMAScript 5代码片段 阅读全文
摘要:
原文:http://www.2ality.com/2013/02/foreach-es6.html本文将对ECMAScript 6中的解构(destructuring)语法做简要介绍,以及讲解一下如何利用解构来让数组方法forEach()的使用更加方便.解构ECMAScript 6中的解构特性具体是指:赋值操作的目标(可以理解为赋值语句的左值)可以是一个模式(pattern),该模式可以进入赋值操作的右值(可以是一个数组或者一个普通对象)的内部,将右值内部的某个数组元素的值(右值为数组的情况)或者某个属性的值(右值为普通对象的情况)赋值给左值模式中包含的某个变量.下面的这个例子演示了解构是如何 阅读全文
摘要:
原文:http://www.2ality.com/2013/02/learn-javascript.html回顾我的编程生涯,有三种编程语言给我学习JavaScript打上了良好的基础(之所以这么说,是因为JavaScript的确有一些比较难学的地方):Scheme: 在我进入大学信息专业的第一学期,我通过经典的“计算机程序的构造和解释”(免费在线阅读)一书学习了Scheme语言.当初,JavaScript从Scheme中学到了闭包[1].最近,受Racket(一种Scheme方言)的启发,ECMAScript 6中又增加了一种称之为private symbol的对象类型来实现“私有性(pri 阅读全文
摘要:
首先要说的是,本文是给那些比较"发烧"的火狐玩家看的,其他浏览器用户可能对本文无爱.很多人喜欢使用bookmarklet,放到自己的书签栏里,在点击时对当前页面进行各种各样的操作,比如原文翻译,比如短网址化,比如"分享到","收藏到",等等.和GreaseMonkey脚本的区别就是,这些操作不需要在每次页面加载后都执行,只需要在自己偶尔需要的时候点击执行就可以.bookmarklet是一段由"javascript:"伪协议开头的JavaScript代码,这段代码执行的上下文是当前标签页中的页面窗口(window). 阅读全文
摘要:
我接触过不少语言,我很看重一门语言的正则表达式是否强大,还有正则与语法的结合是否紧密.在这一点上,JavaScript做的还不错,至少有正则字面量.当然,最强大的还是Perl.我最近发现,JavaScript中的正则在某些地方的表现和其他语言或工具中的正则有些不同,比较另类.虽然你几乎不可能写出也几... 阅读全文
摘要:
原文:http://www.2ality.com/2013/01/comprehensions.htmlES6中将会有两种推导式:数组推导式(array comprehension)和生成器推导式(generator comprehension),你可以使用它们来快速的组装出一个数组或者一个生成器对象.许多编程语言中都有推导式这一语法,比如:CoffeeScript, Python, Haskell, Clojure. 数组推导式下面就是一个ES6中的数组推导式的例子:[for (x of a) for (y of b) if (x > y) [x,y]]执行该推导式的效果和执行下面这个 阅读全文
摘要:
目录名称描述指南简单的单词匹配使用字符类匹配这个或那个分组和层次匹配提取匹配内容重复匹配更多匹配搜索和替换split运算符BUGS相关链接作者和版权致谢名称perlrequick - Perl的正则表达式快速入门描述本页面能够让你了解并使用Perl中最基本的正则表达式用法.指南简单的单词匹配最简单的正则就是一个单词,或者更通用一点,一个字符序列.一个仅包含某个单词的正则可以匹配包含那个单词的任意字符串:"Hello World" =~ /World/; # 匹配成功在这条语句中,World就是一个正则,/World/两边的双斜杠//告诉Perl这是一个正则表达式.运算符=~ 阅读全文
摘要:
原文:http://tantek.com/2012/353/b1/why-html-classes-css-class-selectors如果在网上搜索"CSS类",你会发现有很多原本出于好意的参考和教程中都使用了这个词,根据这个词出现的上下文不同,作者对该词的使用可以分为两种情况,较好的情况可以说是作者的表述不准确,最差的情况就是这种表述完全是错误的,是会误导读者的.因为根本就没有"CSS类"这种东西.作者这里想表达的可能是HTML类,CSS类选择器,甚至是CSS伪类,但绝对不会是"CSS类".术语汇总表如果你想知道应该怎么称呼那些 阅读全文
摘要:
1.如果一个参数有了默认参数值,则其他所有类型的参数(普通参数,默认参数,剩余参数)都不能再有和它有相同的参数名:function foo(x, x = 1) {}//SyntaxError: duplicate argument names not allowed in this context2.普通参数不能放在默认参数的右边:function foo(x = 1, y) {}//SyntaxError: parameter(s) with default followed by parameter without default3.剩余参数必须在参数列表的最右边,它的右边不能再有任何类型 阅读全文
摘要:
首先了解一下JavaScript的历史,下面的一段对话引用并翻译自infoworld对Brendan Eich的采访:InfoWorld: 据我了解,JavaScript最初名为Mocha,然后成了LiveScript,在Netscape和Sun联合时被改名为JavaScript.但它实际上和Java没有任何关系,或者说关系不大,我说的对吗?Eich: 你说的很对.在1995年的5月份到12月份的六个月内,JavaScript的名字先后从Mocha到LiveScript再到JavaScript.在12月份上旬,Netscape和Sun签订了许可协议,让LiveScript改名成为JavaScr 阅读全文
摘要:
原文:https://hacks.mozilla.org/2012/12/ten-things-developers-should-know-about-the-mozilla-developer-network-mdn/Mozilla开发者网络(MDN)是关于Web开发最好的资源之一.它是由开发者们为我们自己设计的网站,MDN体现并执行了Mozilla的使命:促进网络的开放与创新.作为一个开放的,由社区驱动的维基系统,MDN给Web开发者,设计师,应用程序开发者,以及Firefox扩展和主题作者带来了最好的文档,教程以及开发工具.任何人都可以通过在上面添加或编辑文档来让它变的更好.只要是We 阅读全文
摘要:
将Firebug命令行中的语句解析成抽象语法树(AST),使用SpiderMonkey原生的Parser API,另外还推荐一个基于js的parser:esprima.安装:http://files.cnblogs.com/ziyunfei/FireParser@ziyunfei.xpi 阅读全文
摘要:
当我们调试一些框架结构的页面时,也许需要不停的在浏览器命令行(控制台)中切换执行命令所作用的窗口.Chrome中提供了一个下拉框,可你让你很方便的选择每个窗口.虽然也有一些缺点,但总之是很方便的.其实在Firebug下,也有同样的功能.只不过是通过cd(window)命令来实现的.虽然我喜欢真实的命令行,但在浏览器中,这并不适合.我们需要一个下拉选项.然后,我们就有了:比起Chrome中的类似功能好的地方:显示框架元素(iframe或frame)的name和id(name优先),以及框架的src,而chrome显示的是window的属性,那通常不是我们想要的结果.比起Firebug自己的cd命 阅读全文
摘要:
原文:http://tc39wiki.calculist.org/es6/template-strings/ES6中的模板字符串(template string)是一种能在字符串文本中内嵌表达式的字符串字面量(string literal).这种操作在其他语言(比如shell->perl->php等)中通常称之为字符串内插(string interpolation)或者叫变量内插(Variable interpolation).模板字符串在早期的Harmony提案中称之为半字面量(Quasi Litaral),现已更名为模板字符串.模板字符串使用反引号(backtick或者叫bac 阅读全文
摘要:
原文:http://www.xanthir.com/b4Ko0最近经常有人问我:"CSS4"什么时候出来.在此我想明确的澄清一下:根本没有CSS4这个东西现在没有CSS4.以后也不会有CSS4.CSS4是个永远都不会存在的东西.术语"CSS3"指的是那些在CSS 2.1之后发布的所有东西.CSS 2.1是最后一个带版本号的规范名称,以后的规范会丢弃掉后面的版本号数字,直接称之为"CSS"."但是", 你可能会反驳, "我看见那些名为CSS4 Images,或者Selectors 4的规范草案!难道它们不是 阅读全文
摘要:
ES6中的代理(Proxy)对象给了我们自定义对象行为的能力,这个"代理"和网络方面的名词"代理服务器"没有任何关系.你可以先从MDN上了解一些基础知识,再回来看本文中给的例子.索引严格的数组在JavaScript中,数组其实就是个对象.因此,在进行一些看似是非法的数组操作时,JavaScript也能正常运行.比如,读取一个超大的索引:var arr = [];arr[999999999999999999999999999999999999999999999]; //"undefined"再比如,新建一个字符串属性(非法索引):var 阅读全文
摘要:
原文:http://www.2ality.com/2012/03/signedzero.html译者注:文章开始之前,先看道题:Puzzle: A === B; 1/A < 1/B; A = ?你知道A等于什么吗?JavaScript中有两个0:-0和+0.本文解释了为什么会这样,以及它会产生哪些影响.1. 带符号的0数字需要被编码才能进行数字化存储.举个例子,假如我们要将一个整数编码为4位的二进制数,使用原码(sign-and-magnitude)方法,则最高位是符号位(0代表正,1代表负),剩下的三位表示大小(具体的值).因此,−2和+2会编码成为下面这样: 二进制的1010表示十进 阅读全文
摘要:
原文:http://soft.vub.ac.be/~tvcutsem/invokedynamic/js-object-model本文中,我将会对Javascript中的对象模型(object model)进行简要介绍.这里的"对象模型",我指的是开发者们对一个对象的结构和行为所持有的心智模型(mental model).文章最后,我还会提到如何使用ES6中的代理(Proxy)来实现这个对象模型.对象作为映射让我们先从最简单的对象模型开始,然后慢慢完善.一个Javascript对象从核心上说不是别的,仅仅是一些属性的集合.每个属性都是一个字符串到值的映射:var point 阅读全文
摘要:
本文要讲的是一个ES6特性——正则表达式对象的/y标志的作用.该特性同时也是一个ES4特性,所以Firefox3+都原生支持,其他浏览器目前还没有实现.和/i对应于re.ingoreCase类似,/y标识对应的属性是re.sticky(实际上这个y来自于yylex),sticky的意思是"粘滞".和"全局匹配"类似,sticky属性为true的正则表达式对象(有/y标识)的匹配过程称之为"粘滞匹配"(反正我就这么叫了).粘滞匹配会从两个方面影响正则表达式的匹配方式.如下:1.读取和设置lastIndex属性的值以防你不知道lastIn 阅读全文
摘要:
原文:https://hacks.mozilla.org/2012/12/firefox-development-highlights-video-playbackrate-download-attribute/本文要讲两个Firefox Nightly(20)的新特性.video元素支持自定义播放速率通过改变video.playbackRate属性的值可以改变视频的播放速率.1.0是正常播放速度,2.0就两倍快的播放速度.下面的介绍引用自MDN HTMLMediaElement:playbackRate属性可以控制媒体的播放速率.1.0是"正常速度",小于1.0的值会让媒 阅读全文
摘要:
原文:http://smallcultfollowing.com/babysteps/blog/2012/12/05/self-hosted-parallel-js/译者注:此文翻译不通顺,你只需要读懂大概.我已经有段时间没写博客了,原因是我最近正忙着搞Parallel JS,已经花了不少时间了.不过,我们的目标是:在接下来的几周内发布一个最初版本!一个令人兴奋的消息是我们已经开始了自托管(self-hosting)的实现.自托管是一个非常酷的,由Till Schneidereit发起的,SpiderMonkey引擎新的发展方向.其核心思想就是"使用JavaScript来实现Java 阅读全文
摘要:
原文:http://www.2ality.com/2012/12/arrays.html本文要解释一下Javascript中的数组是如何工作的,你将会知道,它们比你想的更像普通对象.1.概述在Javascript中,对象是一个从字符串到值的映射.数组也是对象,只是包含有一些特殊的属性:数组索引(下标):如果一个数组对象的属性的数字值(实际上是字符串值)是一个小于232-1的非负整数,则该属性就会被看成是一个数组索引."length"属性:该属性的值是一个非负整数,表示了数组的长度.这个长度的值通常是数组的最大索引转换成数字后,再加1.下面要说的这个表现有时候会让人感到震惊, 阅读全文
摘要:
原文:http://tc39wiki.calculist.org/about/harmony/"Harmony(和谐)"是TC39在执行ECMAScript规范标准化流程时使用的名称.流程虽然很简单,但在规范的设计和建立共识方面起到了显著的效果.提案的不同阶段提案在经过几个阶段后才能成为最终规范的一部分.草图(Sketch)提案以特性草图(Feature sketches)的形式开始(委员会成员通常称之为"稻草人提案(strawman proposals)"或者"稻草人(strawmen)").特性草图可以在任何时候添加.它们往往源自 阅读全文