日期:2014-05-16  浏览次数:20343 次

javascript的一些细节知识
最近这段时间大多时候都在调试页面,弄了很久也不太满意,怒了,回去专门看了几天的关于CSS的书,带着些惊恐还是决定试下,基本上搞定了,从此后对页面布局样式等不再感到那么无助与厌恶了。看来以前之所以进步不大,那是压力不够啊!
最近看了下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的内部类比较相似。