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

javascript语言精髓读书笔记总结.doc
1:javascript的简单类型包括数字、字符串,布尔值(true和false)、null值和undefin值。其他对象所有的值都是对象。数字、字符串和布尔值“貌似”对象,因为他们拥有方法,但他们是不可变的。在javascript中,数组时对象,函数是对象,正则表达式是对象,当然,对象自然也是对象。

2:下面列出的值被当作假:
   False,null,undefined,空字符串‘‘,数字0,数字NaN,其他的所有值都被当作真,包括true,字符串“false”,以及所有的对象。

3:JavaScript只是一个单一的数字类型。它在内部被表示为64位的浮点数,和java的double一样。不像大多数其他的编程语言,它没有分离出整数类型,所以1和1.0是相同的值。所以就是知道数字的一切都是一种数字,这样就避免了一大类因为数字类型导致的错误。

4:for in 循环语句会枚举一个对象的所有属性名(或键名)。在每次循环中,对象的另一个属性名字符串被赋值给for和in之间的变量。通常你须通过检测obje。hasOwnProperty(variable)来确定这个这个属性名就是该对象的成员,还是从其原型链里找到的。

5:都语句就像while语句,唯一的区别是它在代码块执行之后面而不是之前检测表达式的值。这就意味着代码块将总是要执行至少一次。

6:优先考虑使用.表示法,因为它更紧凑且可读性更好。

7:如果你尝试检索一个不存在的成员元素的值,将返回一个undefined值。
||运算符可以用来填充默认值,例如:var middle = stooges【“middle-name”】|| “none”尝试检索一个undefined值将会导致TypeError异常。这可以通过&&运算符来避免错误。var middle = stooges.status && stooges.status.model

8:typeof和hasOwnProperty能够过滤一些不必要的属性和方法。
  Typeof 能够排除函数:
  Typeof another_stooge【name】 !== ‘function’
  If(another_stooge..hasOwnProperty(name))

9:最小化使用全局变量的一个方法是在你的应用中只创建唯一一个全局变量。
  另一种方法就是使用闭包来进行信息隐藏的方式,它是另一个有效减少全局污染的方法。

10:每个函数对象在创建的时候也附带一个prototype属性。它的值是是一个拥有constructor属性且值即为该函数的对象。因为函数就是对象,所以他们可以像其他的值一样被使用。函数可以存放在变量,对象和数组中,函数可以被当作参数传递给其他函数,函数也可以再返回函数。而且,因为函数是对象,所以函数可以拥有方法。

11:当实际参数的个数与形式参数个数不匹配时,不会导致运行时错误。如果实际参数值过多了,超出的参数值将被忽略。如果实际参数值过少,缺失的值将会被替换为undefined。对参数值不会进行类型检查,任何类型的值都可以被传递给参数。

12:在JavaScript中一共有四种调用模式:方法调用模式,函数调用模式,构造器调用模式和apply调用模式。这些模式在如何初始化关键参数this存在差异。

13:当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。

14:采用更为简短的写法,不仅可以减少输入的字符数,还可以减少文件大小。大部分采用简短写法的代码,执行效率都有轻微提高。使用 var obj = {};代替var obj = new Object();
使用 var arr = 【】 ;var arr = new array();

15:三元操作符可以有效精简只涉及赋值传值操作的if语句。三月操作符也可以支持嵌套,但是嵌套的层次不可以太多,太多可能会影响程序的可读性,这方面需要

16:json是一种轻量级的数据格式,轻量级首先体现在他的结果var obj = {};
  obj.p1 = ‘a’,obj.p2 = ‘b’,obj.p3 = ‘c’,
  可精简为:var obj = {p1 : ‘a’,p2 : ‘b’,p3 : ‘c‘};

17:使用高效率的代码function addEvent(elems, eventName, handler) {

  var i = -1, len = elems.length;

  if (window.attachEvent) {

      eventName = “on” + eventName;

   while (++i < len) {

       elems[i].attachEvent(eventName, handler);

}
} else if (window.addEventListener) {

  while (++i < len) {

      elems[i].addEventListener(eventName, handler, false);

  }

}

  

18:这个方法可以从某个数组返回选定的元素,且不影响原来的数组。如果参数留空,返回的就是全部元素。Array.prototype.slice还可以对某些不是数组而又能通过数字索引访问的类型进行操作,比如arguments:

  function test() {

  alert(Array.prototype.slice.call(arguments));

  }

test(1, 2, 3); // output “1,2,3″

19:数组去重复,总体思路是把数组元素逐个搬运到另一个数组,搬运的过程中检查这个元素是否有重复,如果有就直接丢掉。从嵌套循环就可以看出,这种方法效率极低。我们可以用一个hashtable的结构记录已有的元素,这样就可以避免内层循环。恰好,在Javascript中实现hashtable是极为简单的,改进如下:
  function unique(arr) {
        var result = [], hash = {};
  for (var i = 0, elem; (elem = arr[i]) != null; i++) {
             if (!hash[elem]) {
             result.push(elem);
             hash[elem] = true;
             }
       }
return result;
}
20:在大多数语言中,一个数组的所有元素要求是相同的类型。JavaScript允许数组包含任意混合类型的值。

21:length属性的值是这个数组的最大整数属性名加上1,它不一定等于数组的属性个数。可以设置length的值,设置更大的length无须给数组分配更多的空间。而把length设小将导致所有下标等于新length的属性被删除,通过把下标指定为一个数组的当前length,可以附加一个新元素到该数组的尾部,有时候可以用数组的push方法。

22:在删除数组的元素时,可以用delete方法 和 splice方法等,但是一般用splice方法,因为那样会给数组留下一个空洞。这是因为排在被删除元素之手的元素保留了最初的名字(下标)。

23:for in循环无法保证就是对象中的