javascript的一些细节知识
程序员文章站
2022-07-15 11:37:53
...
最近这段时间大多时候都在调试页面,弄了很久也不太满意,怒了,回去专门看了几天的关于CSS的书,带着些惊恐还是决定试下,基本上搞定了,从此后对页面布局样式等不再感到那么无助与厌恶了。看来以前之所以进步不大,那是压力不够啊!
最近看了下dwr这个东西,虽然很久没更新了,现在项目中用得还是比较多,虽然本人也知道它性能不太好,但用起来确实方便,没办法。所以决定有空好好看看它的实现方式。从中也学到了不少东西。
1.一个方法实现多种参数方式的调用。
如append方法,如果只有一个调用可以这样:
如果有两个参数,正常情况下得再写个方法:
有没有可能只写一个方法就能搞定呢?虽然以前不知道,但现在知道了,那就是有!
新式写法:
上面的例子稍微再改装下,就可以适用于3个或者更多的参数了:
现在就可以直接使用了:
2.javascript中的==与===的区别
http://bonsaiden.github.com/JavaScript-Garden/
上面这个链接讲得还算详细,虽然是英文的,总结下就是,==比较会先将两边的值转换成同样的类型,然后再进行比较,此举在性能上也有所影响。而===则按照严格的规则,不进行任何转换,与java的对象比较差不多,不但值要相同,引用也要一样。所以基本上都推荐用===来进行比较。
3.undefined 与null
undefined 这个东西平时虽然有见过,但基本上没用过,javascript定义了一个叫undefined 的全局变量,同时该全局变量的值也叫undefined,它既不是关键字也不是常量,所以可以手动覆盖它的值。会出现undefined的地方有以下几种情况:
(1).访问全局变量undefined
(2).访问一个没有return的函数
(3).访问一个只包含return;没有给定具体值的函数
(4).访问一个不存在的属性
(5).访问没有传入明确的参数的函数
至于null,在javascript内部用得比较多,基本上能用null的地方都可以用undefined替代。
4.访问函数参数arguments
每个函数都可以访问变量arguments,它包含所有的函数参数值,不过arguments并不是一个数组,因此pop、push与slice等方法不能使用,不过用还是可以使用for循环的访问遍历,即:
5.闭包
其实闭包这种东西本人很少用过,本来写的js代码就不多,怎么能用到这些高级货呢?先给个例子:
其中上面的increment与get函数就是闭包,这个东西与java的内部类比较相似。
最近看了下dwr这个东西,虽然很久没更新了,现在项目中用得还是比较多,虽然本人也知道它性能不太好,但用起来确实方便,没办法。所以决定有空好好看看它的实现方式。从中也学到了不少东西。
1.一个方法实现多种参数方式的调用。
如append方法,如果只有一个调用可以这样:
function append(a) { return a; }
如果有两个参数,正常情况下得再写个方法:
function append(a,b) { return a+b; }
有没有可能只写一个方法就能搞定呢?虽然以前不知道,但现在知道了,那就是有!
新式写法:
function append(a/*,b*/) { var argcount = arguments.length; var lastarg = arguments[argcount - 1]; var arg=0; if(argcount>1){ arg=lastarg; return a+b; } return a; }
上面的例子稍微再改装下,就可以适用于3个或者更多的参数了:
function append(a/*,b*/) { var argcount = arguments.length; if(argcount>1){ var sum = a; for(var i=1;i<argcount;i++){ sum = sum+arguments[i]; } return sum; } return a; }
现在就可以直接使用了:
function foo() { alert(append(10)); alert(append(2,3,4,5)); }
2.javascript中的==与===的区别
http://bonsaiden.github.com/JavaScript-Garden/
上面这个链接讲得还算详细,虽然是英文的,总结下就是,==比较会先将两边的值转换成同样的类型,然后再进行比较,此举在性能上也有所影响。而===则按照严格的规则,不进行任何转换,与java的对象比较差不多,不但值要相同,引用也要一样。所以基本上都推荐用===来进行比较。
3.undefined 与null
undefined 这个东西平时虽然有见过,但基本上没用过,javascript定义了一个叫undefined 的全局变量,同时该全局变量的值也叫undefined,它既不是关键字也不是常量,所以可以手动覆盖它的值。会出现undefined的地方有以下几种情况:
(1).访问全局变量undefined
(2).访问一个没有return的函数
(3).访问一个只包含return;没有给定具体值的函数
(4).访问一个不存在的属性
(5).访问没有传入明确的参数的函数
至于null,在javascript内部用得比较多,基本上能用null的地方都可以用undefined替代。
4.访问函数参数arguments
每个函数都可以访问变量arguments,它包含所有的函数参数值,不过arguments并不是一个数组,因此pop、push与slice等方法不能使用,不过用还是可以使用for循环的访问遍历,即:
for(var i=0;i<arguments.length;i++){ alert(arguments[i]); }
5.闭包
其实闭包这种东西本人很少用过,本来写的js代码就不多,怎么能用到这些高级货呢?先给个例子:
function Counter(start) { var count = start; return { increment: function() { count++; }, get: function() { return count; } } } var foo = Counter(4); foo.increment(); foo.get(); // 5
其中上面的increment与get函数就是闭包,这个东西与java的内部类比较相似。