随笔分类 -  JavaScript

上一页 1 2 3 4 5

JavaScript奇技淫巧之遍历数组
摘要:正常的for循环就不提了,直接进入正题。如下://示例1for(var i=0,a;a=["jack","tom","lily","andy"][i++];){ console.log(a);}//示例2var ary = ["jack","tom","lily","andy"];for(var i=0,a;a=ary[i++];){ console.log(a);}从Firebug控制台能看到依次输出jack ,tom ,lily , 阅读全文

posted @ 2011-03-04 08:36 snandy 阅读(32213) 评论(9) 推荐(9) 编辑

判断JS对象是否拥有某属性
摘要:三种种方式,其中 in 可以检测到原型继承过来的属性 1,in 运算符 var obj = {name:'jack'}; alert('name' in obj); // --> true alert('toString' in obj); // --> true 可看到无论是name,还是原形链上 阅读全文

posted @ 2011-03-04 06:59 snandy 阅读(79190) 评论(3) 推荐(4) 编辑

for in的缺陷
摘要:for in 语句用来列举对象的属性(成员),如下var obj = { name:"jack", getName:function(){return this.name}};//输出name,getName for(var atr in obj) { alert(atr);}注意了吗,没有输出obj的toString,valueOf等内置属性(或称内置成员,隐藏属性和预定义属性)。即for in用来列举对象的显示成员(自定义成员)。如果重写了内置属性呢,下面就重写obj的toStringvar obj = {name:"jack", getName:f 阅读全文

posted @ 2011-03-03 17:29 snandy 阅读(8860) 评论(4) 推荐(3) 编辑

Javascript中克隆一个数组
摘要:08年一家公司JS面试题,职位是javascript工程师(赴google)面试官问我如何克隆一个数组,当时想了下js的Object没有clone方法,java的Object有。那怎么得到一个新数组呢? 我当时回答:用一个loop将源数组元素依次push到新数组中。这是最简单的方法,但显然不是面试官想要的答案。最后告知我:利用Array的slice方法。示例如下:var ary = [1,2,3];//源数组var ary2 = ary.slice(0);//克隆一个新数组console.log(ary2);/* 改变ary2,不会影响到ary,说明的确是两个数组而非引用 * 如果是两个引用, 阅读全文

posted @ 2011-03-03 08:22 snandy 阅读(2351) 评论(3) 推荐(1) 编辑

JavaScript1.6数组新特性和JQuery的几个工具方法
摘要:JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 。这些方法已经被写进了ECMA262 V5。现代浏览器(IE9/Firefox/Safari/Chrome/Opera)都已经支持,但IE6/7/8不支持。jquery的工具方法中提供了类似的功能。1、Array.forEach()和jquery的$().each()。在数组中的每个项上运行一个函数。类似java5 增强的for循环。var ary = [2,4,6,8];// js1.6 Array.forEach方法ary.forEach(function(i){aler 阅读全文

posted @ 2011-03-02 16:44 snandy 阅读(6286) 评论(2) 推荐(2) 编辑

Javascript变量作用域
摘要:变量的作用域指的是变量的可见性,而生命周期则(存活期)则是从另一个角度考察变量。JS中变量的作用域分为全局变量和局部变量,函数内定义的称为局部变量,函数外的称为全局变量。(“函数外的称为全局变量”是相对的,另此处讨论的前提是用var显式声明的变量,函数内不用var定义的变量默认是全局变量,当然忽略var声明变量是不赞成的)。var glob = 4;//函数外声明全局变量function fun() { var height = 20; //函数内用var声明的是局部变量 weight = 50; //函数内不用var声明的是全局变量}fun();alert(weight);JS中没有块级作用 阅读全文

posted @ 2011-03-02 08:28 snandy 阅读(3459) 评论(5) 推荐(9) 编辑

变量声明时命名与变量作为对象属性时命名区别
摘要:这个标题实在拗口,Javascript命名变量所遵循的规则1、第一个字符必须是字母、汉字字符、 下划线(_)或美元符号($)2、剩下的可以是下划线、汉字字符、 美元符号和任何字母、数字以下声明变量是正确的var p,$p,_p;var 长,宽;以下是错误的var .p;//只能是字母、数字、下划线或美元符号var -p;//只能是字母、数字、下划线或美元符号var p*;//只能是字母、数字、下划线或美元符号var 4p,4长;//不能以数字开头var 长 度;//中间不能有空格作为对象属性时,有两种方式存取。一是点号(.)运算符,一是中括号([])运算符。var p = {name:&quo 阅读全文

posted @ 2011-03-01 21:25 snandy 阅读(2345) 评论(4) 推荐(3) 编辑

在循环中正确找到对应DOM元素的索引
摘要:有个网友问了个问题,如下的html,为什么点击所有的段落p输出都是5,而不是alert出对应的0,1,2,3,4。闭包演示 产品 0 产品 1 产品 2 产品 3 产品 4 以上场景是初学者经常碰到的。即获取HTML元素集合,循环给元素添加事件。在事件响应函数中(event handler... 阅读全文

posted @ 2011-03-01 08:48 snandy 阅读(17048) 评论(34) 推荐(25) 编辑

Javascript中大括号“{}”的多义性
摘要:JS中大括号有四种语义作用语义1,组织复合语句,这是最常见的if( condition ) { //...}else { //...}for() { //...}语义2,对象直接量声明var obj = { name : 'jack', age : 23};整个是个赋值语句,其中的{name:... 阅读全文

posted @ 2011-02-28 13:40 snandy 阅读(18724) 评论(11) 推荐(18) 编辑

Javascript中匿名函数的多种调用方式
摘要:Javascript中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。方式1,调用函数,得到返回值。强制运算符使函数调用执行(function(x,y){ alert(x+y); return x+y;}(3,4)); 方式2,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行(function(x,y){ alert(x+y); return x+y;})(3,4);这种方式也是很多库爱用的调用方式,如jQue... 阅读全文

posted @ 2011-02-28 08:48 snandy 阅读(24550) 评论(13) 推荐(12) 编辑

Javascript动态方法调用与参数修改的问题
摘要:Javascript中可以对所传参数在函数内进行修改,如下function func1(name) { name = 'lily'; alert(name);}func1('jack');//输出lily再看一个例子function fun1(n) { this.name = n;}function fun2(name) { fun1.call(this,'lily'); alert(name);}fun2("jack");//输出"jack"fun1函数想把fun2调用时的参数修改为“lily”,但没有成 阅读全文

posted @ 2011-02-27 17:03 snandy 阅读(3723) 评论(7) 推荐(1) 编辑

Javascript中各种trim的实现
摘要:這是lgzx公司的一道面試題,要求給js的String添加一個方法,去除字符串兩邊的空白字符(包括空格、製錶符、換頁符等)。String.prototype.trim = function() { //return this.replace(/[(^\s+)(\s+$)]/g,"");//會把字符串中間的空白符也去掉 //return this.replace(/^\s+|\s+$/g,""); // return this.replace(/^\s+/g,"").replace(/\s+$/g,"");}JQue 阅读全文

posted @ 2011-02-26 18:00 snandy 阅读(6787) 评论(4) 推荐(2) 编辑

js對象的比較
摘要:項目中需要比較兩個對象是否相等,給Object對象開展了(別緊張,別說我把它污染了),一個實現而已,象java一樣可以只給自己想要的類重寫equals方法。Object.prototype.equals = function(obj){ if(this == obj) return true; if(typeof(obj)=="undefined"||obj==null||typeof(obj)!="object") return false; var length = 0; var length1=0; for(var ele in this) { l 阅读全文

posted @ 2011-02-26 09:34 snandy 阅读(2704) 评论(1) 推荐(4) 编辑

上一页 1 2 3 4 5