摘要:
在Javascript中,函数可以很容易的被序列化(字符串化),也就是得到函数的源码.但其实这个操作的内部实现(引擎实现)并不是你想象的那么简单.SpiderMonkey中一共使用过两种函数序列化的技术:一种是利用反编译器(decompiler)将函数编译后的字节码反编译成源码字符串,另一种是在将函数编译成字节码之前就把函数源码压缩并存储下来,用到的时候再解压还原.如何进行函数序列化在SpiderMonkey中,能将函数序列化的方法或函数有三个:Function.prototype.toString,Function.prototype.toSource,uneval.只有toString方法 阅读全文
摘要:
原文:http://d.hatena.ne.jp/teramako/20121129/p1从ES-Discuss邮件列表中看到的.Object.prototype.get = function(){};var o = {};Object.defineProperty(o, "hoge", { value: "OK" });// TypeError: property descriptors must not specify a value or be writable when a getter or setter has been specified问 阅读全文
摘要:
原文:https://gist.github.com/4158604本文作者是Peter Rybin,Chrome开发者工具团队成员.本文中,我们将通过使用Chrome的开发者工具,来学习JavaScript中的两个重要概念"闭包"和"内部属性".闭包首先要讲的是闭包(closure) – JavaScript中最有名的东西之一.一个闭包就是一个使用了外部变量的函数.查看下面的例子:function A(a, b, c) { var ar = [a, b, c]; return function B(i) { return ar[i]; };}var b 阅读全文
摘要:
在ES5中,数组的length属性是这么规定的:15.4.5.2 length数组对象的length属性是一个数据属性,该属性的值始终从数值上大于所属数组的任何一个索引号.length属性的初始特性为{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }.数组的属性可以分为三种:length属性,索引属性,其他属性.和普通对象相比,数组对象特殊的地方就是它的length属性和索引属性,为了对数组的属性做特殊处理,ES5标准专门规定了一个数组专用的[[DefineOwnProperty]]内部方法(15.4.5 阅读全文
摘要:
也许更适合使用双显示器的人.支持本地网页文件比如file:///C:/1.html.以及局域网内的网页文件比如http://192.168.0.100/1.html.在这些网页文件以及网页中的CSS JS IMG标签所引用的文件发生更改时,网页会自动刷新.实现原理是,如果是file协议的文件会检测文件的最后更改时间,如果是http协议的文件,会GET整个文件的内容来对比.每秒一次.没有演示用的动态图和视屏.搜了一下,也许类似于这个http://www.getf5.com/,不过我没用过.安装:http://files.cnblogs.com/ziyunfei/AutoF5@ziyunfei.x 阅读全文
摘要:
https://gist.github.com/4157754,这里看到的.var a = []; //定义一个空数组a[Math.pow(2, 32) - 2] = "最大索引"; //改变length属性,使得a成为一个装满的稀疏数组.数组的最大元素个数为Math.pow(2, 32) - 1个(4294967295),由于数组索引从0开始,所以最大的索引号就是Math.pow(2, 32) - 2console.log(a.length === Math... 阅读全文
摘要:
原文:http://blog.mozilla.org/jorendorff/2012/05/29/rest-arguments-and-default-arguments-in-javascript/在过去的两周,Benjamin Peterson在SpiderMonkey中实现了两个ES6新特性.如果你经常写JS的话,一定会喜欢这两个特性.剩余参数(Rest arguments)是我们熟悉的arguments对象的很好的替代品.语法如下:function f(arg1, arg2, ...rest) { alert("你传入了" + rest.length + " 阅读全文
摘要:
原文:http://addyosmani.com/blog/a-few-new-things-coming-to-javascript/我相信,在ECMAScript.next到来的时候,我们现在每天都在写的JavaScript代码将会发生巨大的变化.接下来的一年将会是令JavaScript开发者们兴奋的一年,越来越多的特性提案将被最终敲定,新一版本的JavaScript将会慢慢得到普及.本文中,我将会讲几个我个人很期待的,希望能在2013年或者更晚一点使用上的新特性.ES.next目前的实现情况可以通过查看Juriy Zaytsev总结的ECMAScript 6兼容性表格,和Mozilla的 阅读全文
摘要:
regex-tuesday,每周二会出一道正则表达式的题目,本周的题目比较简单,如果你答出来了,可以留言,如果答不出来.可以看看我的答案和解释.下面内嵌了原题目页面.你要做的就是使用JavaScript正则字面量的写法/regex/i,来通过所有的测试用例.查看答案这次的题目非常简单,题目要求是要把一句话中间的连续的一个或多个空白符替换成一个空格,把紧跟着句号后面的一个或多个连续空白符替换成两个空格.第一个要求不需要思考:/\s+/g 替换为空格 //匹配情况9/12第二个要求,为了保持不影响前面的替换结果,只能把句号和一个空格放在捕获分组里,再替换到右边./\s... 阅读全文
摘要:
原文:http://www.effectiveperlprogramming.com/blog/1503如果你想要写一个递归的子程序,但你不知道当前子程序的名称,该怎么办?由于Perl是一门动态语言且Perl中的代码引用是第一类对象,就算一个代码引用有自己的名字,你也可能不知道它的名字. Perl 5.16引入了__SUB__ 作为一个能返回当前子程序引用的特殊序列.虽然不用这个新特性你也能使用其他模块实现几乎同样的功能,但那些模块都有一些你也许想要避免的缺点.虽然__SUB__看起来和__FILE__, __LINE__,以及__PACKAGE__这些编译时指令类似,但其实不是,__SUB_ 阅读全文
摘要:
原文:http://www.cyberciti.biz/cloud-computing/http-status-code-206-commad-line-test/HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了".HTTP/1.1 200 OK是HTTP请求成功后的标准响应,当你在浏览器中打开www.cyberciti.biz后,你通常会得到一个200状态码.HTTP/1.1 206状态码表示的是:"客户端通过发送范围请求头Range抓取到了资源的部分数据".这种请求通常用来:学习http头和状态.解决网路问题. 阅读全文
摘要:
原文:http://blogs.msdn.com/b/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx在JavaScript中,函数的作用域链是一个很难理解的东西.这是因为,JavaScript中函数的作用域链和其他语言比如C, C++中函数的作用域链相差甚远.本文详细解释了JavaScript中与函数的作用域链相关的知识,理解这些知识可以帮助你在处理闭包的时候避免一些可能出现的问题.在JavaScript中,函数可以让你在一次调用中执行一系列的操作.有多种方式来定义一个函数,如下: 函数声明:function m 阅读全文
摘要:
原文:http://www.telerik.com/automated-testing-tools/blog/12-11-12/understanding-head-http-204-and-http-206.aspx上次我们讲了HTTP/304响应,今天我们继续讨论另外三种可能让Fiddler用户感到困惑的请求或响应类型.下面的截图中有三条Web会话,每一条都返回了不同的状态码,但都在HTTP/2xx范围内:HEAD请求方法第一个请求返回了HTTP/200,但你应该注意到了,服务器并没有返回响应体.如果你在Inspectors选项卡中查看一下,就会发现客户端使用的是HEAD请求方法.HEAD 阅读全文
摘要:
原文:http://www.telerik.com/automated-testing-tools/blog/eric-lawrence/12-11-06/understanding-http-304-responses.aspx刚刚开始使用Fiddler的用户经常会对Fiddler的网络会话(Web Sessions)列表中的HTTP/304响应感到困惑:如果客户端发送的是一个条件验证(Conditional Validation)请求,则web服务器可能会返回HTTP/304响应,这就表明了客户端中所请求资源的缓存仍然是有效的,也就是说该资源从上次缓存到现在并没有被修改过.条件请求可以在确 阅读全文
摘要:
原文:http://www.2ality.com/2012/11/var-statement-rules.html本文提到了在使用var语句时经常被提到的三条规则,然后告诉你什么时候我们可以打破这些规则.在阅读本文之前,你必须已经了解了JavaScript中函数作用域内的var声明是如何工作的 [1] .1.你可以打破的三条规则1.1. 要打破的规则:不要把var语句放在代码块中以常规看法来说,下面的代码是不好的:// 非常规写法function foo(x, y) { if (x > y) { var tmp = x; x = y; y = t... 阅读全文
摘要:
原文:http://james.padolsey.com/javascript/js-adolescence对于我来说,有一段时间可以描述成为是我在编程生涯(更具体点讲是指JavaScript)中的青少年时期.这一时期的特点是懒惰而又自大.我只认为我自己是对的,其他人都是错的.今天,我给出一些我以前认为是对的,但现在发现是很愚蠢(在大多数情况下)的JavaScript写法:1.使用逻辑运算符作为语句a() || b.foo.bar(); m && c() ? d() : l || m.foo[bee](3);为了显示自己的技能有多高超而放弃常规的写法并不会得到什么真正的好处.译 阅读全文
摘要:
regex-tuesday,每周二会出一道正则表达式的题目,本周的题目比较简单,如果你答出来了,可以留言,如果答不出来.可以看看我的答案和解释.下面内嵌了原题目页面.你要做的就是使用JavaScript正则字面量的写法/regex/i,来通过所有的测试用例.查看答案这次的题目非常简单,就是要匹配一些按字母顺序排序的字符串:/^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?$/ //匹配情况18/26有一些用例没匹配,是因为包含了空格,那么我们还需要加上在每个字母后面加上可选的空格:/^a? ?b? ?c? ?d? ?e? ?f? ?.. 阅读全文
摘要:
regex-tuesday,每周二会出一道正则表达式的题目,本周的题目很有难度,如果你答出来了,可以留言,如果答不出来.可以看看我的答案和解释.下面内嵌了原题目页面.你要做的就是使用JavaScript正则字面量的写法/regex/i,来通过所有的测试用例.查看答案这个题目看似是要把一些由各种字符分割的字符串替换成逗号分割的csv文件格式.根据前两个用例,最先想到的正则是:/ /g 替换为 , //匹配情况8/17第3个用例没有匹配,这也是本题最难的地方了,要确保把引号包围的字符串看成一个整体,不替换其中的空格,没有什么好的办法,只能使用一个|分支,在添加逗号的同时还得把... 阅读全文
摘要:
在JavaScript中,有三种常见的链式结构:原型链(Prototype Chain),调用栈(Call Stack),作用域链(Scope Chain).本文并不准备讲这些概念的基础知识,而是要给出如何遍历这三种链结构的方法,从而加深理解.遍历原型链在JavaScript中,任何对象都有自己的原型链.原型链是由一系列对象加上最后的null组成的.如果还没掌握相关基础知识,可以看看我在MDN上翻译的继承与原型链一文.遍历函数如下:function getPrototypeChain(obj) { var protoChain = []; while (obj = Object.g... 阅读全文
摘要:
今天看了一下《高性能JavaScript》,发现一个问题,就是书中把undefined也当成了字面量(直接量),这是不对的.中文版:英文原版:Literal valuesAny value that represents just itself and isn’t stored in a particular location. JavaScript can represent strings, numbers, Booleans, objects, arrays, functions, regular expressions, and the special values null and 阅读全文
摘要:
原文:https://blog.getfirebug.com/2012/11/07/fireclosure-javascript-closure-inspector/FireClosure是一个值得关注的Firebug扩展.它能很好的集成到Firebug目前的UI中(实际上我们正在考虑是否要把该扩展内置到Firebug中),它的作用是用来查看(Inspector)JavaScript中的闭包.该扩展的作者是 Simon Lindholm.(译者注:非知名人士,这是他AMO上唯一的一个扩展)例子首先,让我们看一个简单的例子:var PersonFactory = function(name, a 阅读全文
摘要:
原文:http://www.2ality.com/2012/11/property-assignment-prototype-chain.html本文要研究一下:一个对象的原型链是如何影响该对象自身的属性赋值操作的.本文更详细的阐述了一下上篇文章“[译]JavaScript中的属性:定义和赋值的区别”中提到的一个知识点.原型链每个对象都有一个包含了一个或者多个对象的原型链,该对象正是这个原型链的起始对象.原型链上的所有对象的所有属性都可以被该对象访问到.例如:> var proto = { foo: 1 };> var obj = { __proto__: proto, bar: 阅读全文
摘要:
原文:http://www.nczonline.net/blog/2012/11/06/ecmascript-6-collections-part-3-weakmaps/WeakMap类似于常规的Map的一点是,它们都是把一个值映射到某个唯一的键上,然后就可以使用这个键获取到与之对应的值.WeakMap和Map不同的地方是,它的键只能是对象值而不可以是原始值.虽然这个限制看起来很奇怪,但正是这一点,才让WeakMap变得很有价值.一个WeakMap对象的键只持有其所引用对象的弱引用,弱引用的特点是,它不能阻止垃圾回收器回收其引用的对象.当那个对象被垃圾回收器销毁后,WeakMap对象中引用它的 阅读全文
摘要:
原文:http://tc39wiki.calculist.org/about/faq什么是"一个JavaScript"的原则?为什么我们不删除或修正那些已有的不好的特性?为什么我们不给语言的版本号做重大变更?为什么我们不弃用一些特性?如何在旧的浏览器中使用新特性?JavaScript的下个版本什么时候可用?我们会给严格模式添加新的限制吗?为什么不使用字节码虚拟机?有类了?难道JavaScript真的要变成Java了?如何避免"完全由委员会设计的规范"?这么多的设计草稿是不是意味着JS会变的臃肿?我怎么能提交一个建议?在es-discuss上发帖我比较紧张 阅读全文
摘要:
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.var arr = [];console.log(Object.prototype.toString.call(arr)) //"[object Array]"本文要讲的就是,toString方法是如何做到这一点的,原理是什么.ECMAScript 3在ES3中,Object.prototype.toString方法的规范如下:15.2.4.2 Object.prototype.toString()在toString方法被调用时,会执行下 阅读全文
摘要:
在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从一个或多个的上层原型上继承一些属性.第二个原因是,JavaScript中的属性不光有值,它还有一些除了值以外的其他特性,其中一个影响属性遍历的特性就是[[Enumerable]],如果该值为true,则称这个属性是可枚举的,否则反之.知道了这些,我们就可以把属性的遍历分为四种情况.注:示例代码中,我们要遍历的对象是浏览器中的window,环境为Firefox 19,代码运行在空白页面中的scrip 阅读全文
摘要:
首先要说的是,本文只讨论技术.一段时间以来,Google搜索不好用,具体表现为:随机出现"页面乱码"或者"页面空白"或者"弹出下载对话框".相对于其他浏览器中的空白页面,Firefox下的提示更加友好一点."无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。"这句话很关键,我们一下就知道了问题所在:gzip压缩.也许大部分人访问google都是通过域名http://www.google.com.hk来访问的,但这种方式应该放弃,原因你懂的,某些关键字不能搜.下面我们进行试验.试验网址有两个:1.htt 阅读全文
摘要:
原文:http://www.2ality.com/2012/08/property-definition-assignment.html你知道吗?定义一个属性和为一个属性赋值是有区别的.本文解释了两者之间的区别以及各自的作用影响.该话题来自于Allen Wirfs-Brock在es-discuss邮件列表中的一封邮件. 1. 定义VS赋值定义(Definition).定义属性需要使用相应的函数,比如:Object.defineProperty(obj, "prop", propDesc)如果obj没有prop这个自身属性,则该函数的作用是给obj添加一个自身属性prop并赋 阅读全文
摘要:
regex-tuesday,每周二会出一道正则表达式的题目,本周的题目比较简单,如果你答出来了,可以留言,如果答不出来.可以看看我的答案和解释.下面内嵌了原题目页面.你要做的就是使用JavaScript正则字面量的写法/regex/i,来通过所有的测试用例.本周题目的具体要求是把用例中链接的Markdown写法替换成右侧的HTML,一共有两个文本框需要填写,左边的写替换正则,右边的写替换结果.相当于使用"xxoo".replace(/xx/,"oo").查看答案这个题目主要考察捕获分组和匹配URL的正则写法,懂不懂Markdown的语法并不重要,只需要观 阅读全文
摘要:
原文:http://www.2ality.com/2012/10/javascript-properties.html在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的.属性类型JavaScript中有三种不同类型的属性:命名数据属性(named data properties),命名访问器属性(named accessor properties)以及内部属性(internal properties).命名数据属性这种属性就是我们通常所用的"普通"属性,它用来将一个字符串名称映射到某个值上.比如,下面的对象obj有一个名为字符串" 阅读全文
摘要:
原文:https://hacks.mozilla.org/2012/10/firefox-development-highlights-viewport-percentage-canvas-toblob-and-webrtc/本文讲几个Firefox Nightly中的新特性.视区百分比长度Gecko现在支持了新的长度单位: vh, vw, vmin, vmax. 1vh就是视区高度的1%,而且该长度单位并不依赖于它的容器的尺寸.这样我们就可以构建一个直接和页面大小成比例的区域(比如HTML幻灯片,可以在不同的页面大小下显示相同的外观).vh视区高度的1/100.vw视区宽度的1/100th. 阅读全文
摘要:
原文:http://dailyjs.com/2012/10/15/preparing-for-esnext/Brendan Eich在Harmony之梦实现了一文中,讲了一些Firefox已经实现的ES6新特性.令Node开发者兴奋的是,V8也实现了其中不少的特性.如何知道自己使用的Node支持哪些新特性:首先查看process.versions的值,~ node -e 'console.log(process.versions)'{ http_parser: '1.0', node: '0.8.12', v8: '3.11.10.22& 阅读全文
摘要:
regex-tuesday,每周二会出一道正则表达式的题目,本周的题目比较简单,如果你答出来了,可以留言,如果答不出来.可以看看我的答案和解释.下面内嵌了原题目页面.你要做的就是使用JavaScript正则字面量的写法/regex/i,来通过所有的测试用例.本周题目的具体要求是把用例文本中第二次出现的相同行按规则在左右两侧各添加两个星号,一共有两个文本框需要填写,左边的写替换正则,右边的写替换结果.相当于使用"xxoo".replace(/xx/,"oo").查看答案这个题目主要考察捕获分组.1.匹配左边的文本首先应该写出匹配左边文本第一行的正则,由于用 阅读全文
摘要:
原文:http://www.2ality.com/2012/10/tc39-september.html 译者注:本文可能会看不大明白,推荐看Github上更完整的会议记录.多亏了Rick Waldron,我们才能看到这份TC39 [1]在2012年9月18-20日期间的会议上所做的关于ECMAScript.next的决定的详细记录.本文总结并解释了该记录的重点部分.9月18号会议记录重点:国际化API(ECMA-402)的最终草案已经通过(PDF下载页面, HTML格式).接下来会被提交到Ecma大会进行审批.该API不依附于ECMAScript,单独存在,它将被使用在ECMAScript 阅读全文
摘要:
__proto__属性未来会成为ES6标准的一部分,目前,该属性在各个浏览器下的实现差别也许比较大.本文我们只讨论它在Firefox最新版本中的表现,因为Firefox是最先实现的这个魔法属性(magic property)的浏览器(同类的属性还有__parent__和__count__等,但这两个已经被废弃了.),而且该属性在Firefox中的表现也最有望能成为标准.首先要说的是,我们通常用的__proto__属性都是从Object.prototype上继承下来的,该属性是个访问器属性:>uneval(Object.getOwnPropertyDescriptor(Object.pro 阅读全文
摘要:
前两天我在一篇文章中讲到了"超长原型链"这个东西,有些读者不是很明白.我觉的有必要再详细的解释一下,首先出道题:function Foo() {} //构造函数 Foo.prototype.say = function () { return "I'm a Foo!";}; //原型对象上添加一个say方法var foo1 = new Foo; //生成一个Foo实例foo1.say() ... 阅读全文
摘要:
regex-tuesday,每周二会出一道正则表达式的题目,本周的题目比较简单,如果你答出来了,可以留言,如果答不出来.可以看看我的答案和解释.下面内嵌了原题目页面.你要做的就是使用JavaScript正则字面量的写法/regex/i,来通过所有的测试用例.查看答案这个题目主要是让我们写一个匹配标准域名的正则.首先要做的是:观察用例.1.协议从用例中看出,只有两种协议是合法的,http和https,各种伪协议都是不能通过的.于是我们的正则可以写成这样:/^https?:\/\// //匹配情况27/412.最后一级域名通过观察,可以看到最后一级域名中允许使用的字符有... 阅读全文
摘要:
原文:http://www.nczonline.net/blog/2012/10/16/does-javascript-need-classes/译者注:在我长达一年的工作生涯中,我遇到过有人把构造函数称做类,还有人把对象字面量称做类.这比把火狐扩展叫成插件都令我*疼.下面是Brendan Eich给今年的jsconf.eu录制的视频,其中提到了类.无论你喜欢还是不喜欢,ECMAScript 6中将会包含类(class)这个新东西了[1].在JavaScript中,对类的需求一直都有两极分化的趋势.有些人特别喜欢JavaScript中没有类,因为这和其他语言不同.另一方面,还有一些人厌恶Jav 阅读全文
摘要:
原文:http://blog.vjeux.com/2011/javascript/cyclic-object-detection.html包含循环结构的对象称之为循环对象,循环对象无法遍历,因为在遍历过程中会产生死循环.本文讲了三种用来检测一个对象是否循环对象的技术.译者注:创建循环对象作者没有讲怎么创建一个循环对象,我觉的有必要讲一下.循环对象是一个自身的某个属性指向自己的对象.可以这样来创建.var foo = {};foo["bar"] = foo;jQuery.param(foo); //这是一个死循环,浏览器报错InternalError: too much re 阅读全文
摘要:
原型链一直是个很抽象的概念,看不到,摸不着.随着最近对JavaScript进一步的学习,我对原型链有了一点理解,下面讲出来.基础知识在JavaScript中,一共有两种类型的值,原始值和对象值.每个对象都有一个内部属性[[prototype]],我们通常称之为原型.原型的值可以是一个对象,也可以是null.如果它的值是一个对象,则这个对象也一定有自己的原型.这样就形成了一条线性的链,我们称之为原型链.访问一个对象的原型可以使用ES5中的Object.getPrototypeOf方法,或者ES6中的__proto__属性.原型链的作用是用来实现继承,比如我们新建一个数组,数组的方法就是从数组的原 阅读全文