随笔分类 - javascript
js 心得
摘要:我们先从阿灰 的蛋疼的例子开始.demo1: function test() { var x = 1; with ({x: 2}) { eval('function foo() { console.log(x); }'); eval('var bar = function() { console.log(x); }'); } foo(); bar(); } test();大多数按照ES5实现的引擎(除了Opera12-)的结果. 打印的都是 两个2 .我必须先强调下.这个结果,按照标准是错的. 按照标准都应该是 1 , 2 . Opera12- 会打印两个1 .
阅读全文
摘要:原题地址:http://www.cnblogs.com/ziyunfei/archive/2012/10/04/2711370.html有兴趣的同学可以去做一做.本帖为,本人给出的答案贴.并非原作者给出答案. 仅供参考. 欢迎讨论.1. TypeError原因: Function.prototype.toString不是一个通用方法,这意味着,该方法被调用时,其this,如果不是一个函数对象,则要抛出TypeError异常.2. TypeError.原因: new String(expression);是需要对expression 解释执行,并对其结果进行 内部ToString运算. 其调用栈
阅读全文
摘要:我们先从一组 用例说起. 看代码: null > 0 // false null == 0 // false null >= 0 //true 我们今天讨论的主要内容,并不是这个结果可能看起来多么奇怪. 而是为什么会这样. 之所以特别记一篇随笔在这里,主要是因为,我在得到了Brendan Eich 的一些确认后.发现答案和我当初的猜测不一样. 所以我有反省,自己对ES的一些理解上,是不是有些偏主观. 开始前,我们先拿ES3,ES5的相关定义说起: 注1 : ES3,ES5对关系运算符 ">" , "<", ">=&
阅读全文
摘要:本文是对上一篇随笔凑凑热闹,给eval做个科普.的扩展阅读.如果您没看过上一篇,我建议您先去看看,然后再看此篇. thx.此篇,大量引入ES5 的概念以及名词. 实属无奈,因为直接调用概念来自ES5. 如果你觉得阅读这些东西有些浪费时间. 我也尝试给一个白话文的解释.ES5设计直接调用的目的就是, 让eval 有改变eval动态执行代码的scope 为global object的这一能力. 但是很不好的是.他们通过直接调用来实现这种,很抽象的概念来实现这个能力. 而后面那些官方咒语般的描述的本质,其实是想说明一层意思 . 就是 , 如果你的语句里 ,eval 是一个看起来独立调用, 不转借它人
阅读全文
摘要:此篇.本来想多写些测试用例. 但是因为 阿灰,已经做了很多测试.所以就做个科普吧.eval是什么.我个人觉得eval最初的设计,就是一个内置函数.提供一个动态执行代码的接口. 所以ES3上对他的描述就是如此简单. 这里为了描述清楚ES3对 eval code的规范.所以我不得不拿出一大段来解释这些东西.ES3 :.Eval Code : 当控制器进入一个eval code 的执行环境时,前一个(eval函数调用代码所处的)执行环境,作为调用环境(calling context,调用环境),用以决定作用域链.变量对象,及this关键字的值 如果没有调用环境,则作用域链、变量对象、...
阅读全文
摘要:此篇,探讨的是一种可以让脚本自己更新自己缓存副本的能力. 因为上一版本,绝大多是朋友,给我的反馈是看不懂,所以我争取在这个重写的版本中.详细把每个细节都介绍一二. 如果大多数细节,都是您了解的,则跳跃性阅读即可. thx. 另:本文讨论的 方案,在国内的网络环境.很难实施. 仅仅是一种探讨 .此篇内容非常多. 感谢您的宝贵时间,希望能耐心看完. 关于缓存在开始之前,不得不提到 "web缓存".如果您对它有充分理解,请直接跳过. 我们可以简单的理解下什么是资源文件的缓存, 比如一个页面中引入了一个脚本 a.js ,这个文件的内容可能不会经常变化. 所以每次打开这个页面, 如果
阅读全文
摘要:正美今天扔出来的类似下面的代码:参考代码:var o = { test: function () {alert('origin')}};o.test(o.test = function(){ alert('changed'); }); 这段代码,我们直觉,觉得打印 origin 才是合理的. 至少我个人是这样认为的.但是.Chrome17-, IE8- 都会打印changed . 而 Firefox0.8+,Safai3+, Opera9.2+,IE9+ 则都打印origin. 出现这个问题的根源,我们通过翻看 ES3和ES5,可以找到原因. 原来ES3和ES5
阅读全文
摘要:var namespace = {};void function (window, document, ns, undefined){ ns = window[ns]; if(!window.performance || ns.Performance){ //performance api , (Date : 2011-11), ie9+(包括兼容模式), chrome11+, Firefox7+ . (Safari,Opera. 没有实现) return; } var mixin = function (oTa...
阅读全文
摘要:支持浏览器: IE9+,Chrome11+,Firefox7+.宿主对象window.performance. 参考资料:http://msdn.microsoft.com/zh-cn/office/ff975118参考w3c的标准草案:http://w3c-test.org/webperf/specs/NavigationTiming/目前,IE9+和 chrome11+,Firefox7+已经实现了该草案定义的接口.成员:.navigation(一个叫做performanceNavigation的对象.).timing(这玩意是一个被称作performanceTiming的包含了很多成员的
阅读全文
摘要:先看看 MSDN上的描述. Adds a property to an object, or modifies attributes of an existing property.Object.defineProperty(object, propertyname, descriptor)ArgumentsobjectRequired. The object on which to add or modify the property. This can be a native JavaScript object or a DOM object.(can be 不等于 must be啊. I
阅读全文
摘要:首先引入 w3help的,莫的测试: 原帖地址:http://www.w3help.org/zh-cn/causes/BX1053w3help的测试,和我的测试相互补充,应该比较完整了.悲剧的是我做完测试后,和莫提了一嘴,他告诉我w3help有啊. 我累个去.咋不早说.我可以省不少事呢.建议先看看w3help的.内容比较详细.尤其是据说 window.open,这种宿主方法.居然,可能在将来被html5所统一.期待啊.浏览器实现差异: .一个open的窗口被拦截后,Opera11-,Chrome11-仍然会有窗口句柄. 而Safari是undefined ,IE和Firefox则是 nul..
阅读全文
摘要:此BUG,已修复了. 具体哪个版本修复的,我懒得去验证了,我手里的15,16已经是修复了...先看一个注释的写法:/* 个/ */这个在chrome下会抛出异常.Uncaught SyntaxError: Unexpected token *原因是,汉字个的 Unicode 为 4e2a , 而chrome的程序员,为了加速词法分析,简单的使用了下面这种逻辑:1,扫描到/* ,就快速向后搜索,一但遇到 code point为 2a+\u002f 的情况,他就简单认为这是 */ .所以认为注释结束了. 然后直接忽略掉注释部分,(即把他们从输入元素流中踢出去.注意我之所以提到直接忽略,是因为这里还
阅读全文
摘要:ie9 仍然未改变的一些不好的部分:.未配置 Expires max-age , no-cache ,no-stroe 时 默认仍然有会话级的缓存.存在.getElementsByName 仍然只对 表单元素有效..仍然不支持window.XPathEvaluator 方法..仍然不支持XPathResult.仍然不支持 window.open 方式的postMessage 通信..仍然不支持 onpageshow onpagehide.同ie8类似. el.setAttribute('onclick',''); 只能工作在非怪异模式或兼容模式下..仍然不支持正
阅读全文
摘要:简述部分摘自某本关于P3P隐私策略的书籍.而部分详细的表格来自w3.org.而相关测试数据出自本人测试.如有遗漏或错误,欢迎指正.相关资源:1.http://www.w3.org/P3P/2.http://www.w3.org/TR/2002/REC-P3P-20020416/简述:从本质上来说,P3P 策略是由一系列多选项问题的答案组成的,因此,它并不总像一个人类可读的隐私策略那样包含许多信息细节(例如,用英语或者其他某种口语语言写成的策略是用来让人阅读的,而不是让计算机识别的)。P3P策略的标准格式使它便于自动处理。同 样 ,P3P规范也包含有用于请求和传输P3P策略的协议.P3P协议所基
阅读全文
摘要:在您开始本文的阅读前,我强烈建议您可以先读一读此篇:http://w3help.org/zh-cn/causes/SD9004. HTMLCollection 接口定义interface HTMLCollection{ readonly attribute unsigned long length; Node item(in unsigned long index); Node namedItem(in DOMString name);}对于 HTMLCollection集合对象 必须要说一说的是 namedItem方法. 看看规范的解释.原文:namedItem methodThis me
阅读全文
摘要:分别测试注释掉 首行代码 alert; 与不注释掉的 执行结果差异. alert;//注释后再次在ie6 ie7 ie8中测试下 var hijack = window.alert; window.alert = function(){ hijack('hijack'); }; alert('origin');当然非ie浏览器 是无此问题的.ie9也已经更改了这种惰性绑定机制. 所以也无此bug了.是的.之所以出这个问题. 就是因为. IE的工程师们大概觉得. 进入js执行环境后.立刻把window对象上的宿主成员.都给global对象一份.是得不偿失的.所以引
阅读全文
摘要:有时.为了访问下一个页面时,可以更快.我们可能在当前页面 onload之后,利用空闲 去预加载下一个页面,以及相关资源.为了不影响当前页面.我们必须保证.这些预加载的html css js 资源不被解析或执行.先看看一些其他可选择的方式:new Image().src 方式: 缺点 只能完整的预加载 mimeType 是 image/* 的资源. 其他资源只会被加载一个包的数据.就会被终止下载.link rel="stylesheet" 缺点 ie css表达式 css样式将被渲染. 非 ie 无法获知onload onerrorlink rel="stylesh
阅读全文
摘要:首先本文只讨论 window.Worker而不包含SharedWorker.毕竟这玩意连firefox4 beta7 都还没有支持.(貌似chrome safari opera 的较新版本都已经支持.)有一点要提前说明的是:worker线程中的代码具有独立的执行环境. 我们可以把它假想成一个mini的global环境. 有兴趣的同学可以去看相关文档.在这个执行环境中.不要在奢望你能调用绝大多数宿主提供给我们的对象、属性、方法.你大概可以认为,我们只能用的上js内置对象和方法.其他的一律不考虑.不过 在该执行上下文内.我们可以使用这样一些东东:self : 即当前worker 的GlobalWo
阅读全文
摘要:在本文开始前 , 我先引入,摸同学的文档. 来说明一些问题.然后我在此基础上,会做一些扩展说明.文档地址 :http://www.w3help.org/zh-cn/causes/RX8012.基于以上的认识,我们开始接下来的话题...我们所要解决的是这样一种需求:当我们 现在有一个很大滴 flash 在页面上,且wmode 必须为window的前提下...如何使我们的一些元素不被 flash遮挡的呢?遗憾的是,我所能给出的答案是 . 并不完美.我仍然无法搞定 opera 和 safari 两款浏览器. 那么此文 希望可以起到抛砖引玉的作用吧.其实答案很简单. 在展示元素下面、flash上面放一
阅读全文
摘要:javascript 函数实参数限制.我依稀记得哪本书上有说过,实参数限制是32个? 现在想想估计是我记错了..他也许说的是32位.测试结果:safari 下是65535个.即 ushort 来存储(2字节 16个1).更多的则忽略.其他浏览器 至少是int.MaxValue .据说FireFox 甚至是用long 来维护 实参数.其他浏览器 也许是int 或者可能是uint .这个就不管了. 毕...
阅读全文
浙公网安备 33010602011771号