随笔分类 -  JavaScript

摘要:本文前半部分转自:正则表达式–零宽断言详解 零宽断言的意思是(匹配宽度为零,满足一定的条件/断言) 我也不知道这个词语是那个王八蛋发明的,简直是太拗口了。 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。 其中零宽断言又分四种 先行断言:也叫零宽度正预测先行断言(?=表达式),表示匹配表达式前面的位置 例如 [a-z]*(?=ing) 可以匹配cooking singin... 阅读全文
posted @ 2012-09-24 20:50 草根程序猿 阅读(1627) 评论(0) 推荐(0) 编辑
摘要:我们先看段代码:var s = "Test";var len=s.length; 我们知道在JavaScript中像上面这样声明的字符串不是对象,但既然这里的s不是对象,为什么会有length的属性呢? 原因是在JavaScript中只要引用了字符串(数字、布尔值也是一样的)的属性,JS就会将字符串通过调用new String(s)的方式转换成对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁(真实实现并不一定是这样,但整个过程看起来是这样)。这个过程就叫包装对象。 有没有办法验证上面的解释呢,我们来看两段代码: 代码一:v 阅读全文
posted @ 2012-09-20 08:31 草根程序猿 阅读(2699) 评论(0) 推荐(1) 编辑
摘要:无意中看到某网站的一段JS代码: 1 function clearSearchText(){ 2 var searchtext = document.getElementById("searchwordl").value 3 document.getElementById("searchwordl").value=""; 4 } 5 function replaceALL(){ 6 var replaceTxt = document.getElementById("searchwordl").value; 7 va 阅读全文
posted @ 2012-09-18 21:12 草根程序猿 阅读(3886) 评论(3) 推荐(2) 编辑
摘要:测试代码:<div id="test"></div><script> document.oncontextmenu=function(){ return false; }; var oDiv=document.getElementById("test"); oDiv.onmousedown=function(e){ e= e || window.event; var mouseNum = e.button; this.innerHTML = mouseNum; }</script> 在线测试: 结论:... 阅读全文
posted @ 2012-09-11 10:28 草根程序猿 阅读(10611) 评论(0) 推荐(1) 编辑
摘要:周末闲来无事写了一个JavaScript版扫雷游戏,现在把源代码分享出来,共同学习。 扫雷游戏的原理大家可以参考这篇文章:http://www.cnblogs.com/goodwin/archive/2010/03/22/1691871.html JavaScript代码:(function () { var FLM = function (id,rowCount,colCount, minLandMineCount, maxLandMineCount) { if (!(this instanceof FLM)) return new FLM(... 阅读全文
posted @ 2012-09-08 22:40 草根程序猿 阅读(4559) 评论(20) 推荐(4) 编辑
摘要:递归算法的时间复杂度除非只有前两项,否则都不是线性的,并且相当耗费内存。我们用最常见的的fibonacci数列来说明:function fibonacci(n){ if( n === 0 || n === 1){ return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); }} 这是一种最常见的写法,这种写法极其耗费内存,当参数n大于30时,就会明显感觉到花的时间比较长,如果n等于100,浏览器极有可能会崩溃掉。 我们来分析一下耗费内存和时间原因:先将要计算的变量值存到堆栈中... 阅读全文
posted @ 2012-09-05 08:41 草根程序猿 阅读(6915) 评论(10) 推荐(0) 编辑
摘要:本文首发博客园:http://jscode.cnblogs.com,转载请注明出处。 关于Element跟Node的区别,cilldren跟childNodes的区别很多朋友弄不清楚,本文试图让大家明白这几个概念之间的区别。 Node(节点)是DOM层次结构中的任何类型的对象的通用名称,Node有很多类型,如元素节点,属性节点,文本节点,注释节点等,通过NodeType区分,常见的有:节点类型NodeType元素element1属性attr2文本text3注释comments8文档document9 更多节点类型参考:https://developer.mozilla.org/en-... 阅读全文
posted @ 2012-09-04 22:12 草根程序猿 阅读(28166) 评论(1) 推荐(12) 编辑
摘要:很多初学者对于JavaScript中的offset、scroll、client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确。图一 不知道大家看到这张图的第一感觉如何,反正我的感觉就是“这次第,怎一个乱字了得”。 既然我认为上图太多太乱,那么我就把offset、scroll、client分开说,希望能让大家彻底弄清楚,今天只说offset。一、关于offset,我们要弄明白什么 w3中offset相关页面是:http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelem... 阅读全文
posted @ 2012-09-03 20:02 草根程序猿 阅读(34840) 评论(16) 推荐(25) 编辑
摘要:关于JavaScript中的Delete一直没有弄的很清楚,最近看到两篇这方面的文章,现对两文中部分内容进行翻译(内容有修改和添加,顺序不完全一致,有兴趣推荐看原文),希望能对大家有所帮助。 原文为: 1、http://perfectionkills.com/understanding-delete/(英文) 2、http://nanto.asablo.jp/blog/2008/01/09/2552470(日文) 注:本文首发博客园(http://jscode.cnblogs.com/),转载必须给出原文链接。一、问题的提出 我们先来看看下面几段代码,要注意的是,以下代码不要在浏... 阅读全文
posted @ 2012-09-02 13:18 草根程序猿 阅读(5201) 评论(7) 推荐(7) 编辑
摘要:这是最近碰到的几个题目,简单地写一下我自己的方案,在此分享给大家,也希望能看到大家的方案。 水平有限,不保证我的方案绝对正确,如有错误欢迎指出。一、自己实现string的substring方法方法一:用charAt取出截取部分String.prototype.mysubstring=function(beginIndex,endIndex){ var str=this, newArr=[]; if(!endIndex){ endIndex=str.length; } for(var i=beginIndex;i<endIndex;i++... 阅读全文
posted @ 2012-08-31 17:57 草根程序猿 阅读(3638) 评论(3) 推荐(5) 编辑
摘要:一、JavaScript跨平台事件 对于跨平台事件我们一般这么写(只例举添加事件):function addEventHandler(oTarget, sEventType, fnHandler){ if(oTarget.addEventListener){ oTarget.addEventListener(sEventType,fnHandler,false); } else if(oTarget.attachEvent){ oTarget.attachEvent("on"+sEventType,fnHandler); } else{ ... 阅读全文
posted @ 2012-07-27 09:34 草根程序猿 阅读(7287) 评论(27) 推荐(37) 编辑
摘要:一、取URL中的参数function getParameterByName(name) { var match = RegExp('[?&]' + name + '=([^&]*)') .exec(window.location.search); return match && decodeURIComponent(match[1].replace(/\+/g, ' '));}二、正则分组var testStr="<div><img src='/a.jpg' alt=&# 阅读全文
posted @ 2012-07-25 18:33 草根程序猿 阅读(15428) 评论(47) 推荐(65) 编辑
摘要:这是淘宝UED招聘题中的两道JavaScript题目。题目一要求 小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp)。从这段描述可以得到以下对象:function Dog() { this.wow = function() { alert(’Wow’); } this.yelp = function() { this.wow(); }} 小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一... 阅读全文
posted @ 2012-07-07 10:10 草根程序猿 阅读(3341) 评论(24) 推荐(0) 编辑
摘要:题目要求 这是淘宝前端开发面试JavaScript部分一道题。 下面这个ul,如何点击每一列的时候alert其index?:<ul id=”test”> <li>这是第一条</li> <li>这是第二条</li> <li>这是第三条</li></ul>题目分析 两种方案,一是给每个li加一个自定义属性,然后在点击事件中alert出就行,二是利用闭包。这两种方法各有利弊,前者简单,但增加了自定义属性,改变了页面HTML代码,后者代码简洁但增加了内存消耗。代码如下:function $(id) { re 阅读全文
posted @ 2012-07-06 07:40 草根程序猿 阅读(3877) 评论(11) 推荐(0) 编辑
摘要:面试题目 这是搜狐JavaScript面试题,要求如下: 实现一个URI解析方法,把url里#之后的参数解析成指定的数据结构。function urlParser(s){ //+++++++++++答题区域+++++++++++ //+++++++++++答题结束+++++++++++}try{ var url1 = "http://www.abc.com/m/s/#page/2/?type=latest_videos&page_size=20"; var url2 = "http://www.abc.... 阅读全文
posted @ 2012-07-05 18:08 草根程序猿 阅读(1823) 评论(7) 推荐(1) 编辑
摘要:作者:阮一峰 日期:2009年8月30日 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。var n=999;function f1(){ alert(n);}f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。function... 阅读全文
posted @ 2012-07-05 17:42 草根程序猿 阅读(1191) 评论(2) 推荐(3) 编辑
摘要:面试题目 这是搜狐JavaScript面试题,要求如下: 实现一个叫Man的类,包含attr, words, say三个方法。var Man;//+++++++++++答题区域+++++++++++//+++++++++++答题结束+++++++++++try{ var me = Man({ fullname: "小红" }); var she = new Man({ fullname: "小红" }); console.group(); console.info("我的名字是:" + me.attr(... 阅读全文
posted @ 2012-07-05 00:07 草根程序猿 阅读(1231) 评论(5) 推荐(0) 编辑
摘要:面试题目 这是搜狐JavaScript面试题,要求如下: 实现一个遍历数组或对象里所有成员的迭代器。var each = function(obj, fn){ //+++++++++++答题区域+++++++++++ //+++++++++++答题结束+++++++++++};try{ var data1 = [4,5,6,7,8,9,10,11,12]; var data2 = { "a": 4, "b": 5, ... 阅读全文
posted @ 2012-07-04 15:41 草根程序猿 阅读(2269) 评论(6) 推荐(0) 编辑