代码改变世界

《Effective JavaScript》编写高质量的Javascript代码的68个有效方法-读书笔记

2014-08-02 12:37  臭小子1983  阅读(394)  评论(0编辑  收藏  举报

一、让自己习惯JavaScript

一、当心隐式转换

  数字和字符串相加返回字符串

  1 + "2" = "12";    1 + 2 + "3" = "33"

 

  NaN:”Not a Number”不是一个数字,

  isNaN():来判断是不是一个不是数字,如果是数字返回false,否则返回true

 

  判断函数参数是否存在:

  funtion point(x, y){

    if ( typeof x === "undefined") { x = 320 }

    if ( typeof y === "undefined") { y = 320 }

  }

 

二、相等与绝对相等

  ==、===

  ==的强制转换:

    1、44 == "44" 返回true,

    2、undefined == null 返回true;

 

三、分号的自动插入

  javascript分号插入的规则

  1、分号在 } 标记之前一个或多个换行之后和程序输入的结尾被插入

1 <script>
2     function square(x) {
3         var n = +x
4         return n * n
5     }
6     
7     function area(r) { r = +r; return Math.PI * r * r}
8 </script>

 

二、变量作用域

一、尽量少用全局对象

  避免声明全局变量,使用局部变量

  避免对全局对象添加属性,使用全局对象来做平台特性检测.

 

二、使用声明的局部变量

  局部变量如果不使用var 声明,那么该变量隐式的转换成全局变量

 

三、熟悉掌握闭包

  闭包:内部函数调用外部函数的变量,当函数结束时变量在内存中不会释放,ie下会导致内存泄露浏览器崩溃

 1 <script>
 2     function maskSandWich(){
 3         var maric = 1;
 4 
 5         function make(filling){
 6             return maric++  + " and " + filling;
 7         }
 8 
 9         return make;
10     }
11 
12     var f = maskSandWich();
13     console.log(f("ss"));    // 1and ss
14     console.log(f("ss"));    // 2and ss
15     console.log(f("ss"));    // 3and ss
16     console.log(f("ss"));    // 4and ss
17 </script>    

  

六、库和API设计

54、将undefined看做“没有值”

  当js没有具体的值的时候就返回undefined,未赋值的变量也返回undefined

  如:

  var x;   console.log(x);      // undefined

  var obj = {};  conole.log(obj.x);       // 未找到对象属性值返回undefined

  function f() {  return ; };      // 返回undefined

 

55、接收关键字参数的选项对象

  一个函数的参数过多,又要记住参数的位置,又不利于扩展。

  var alert = new Alert(a, b, c, d ,e ,f, g);

  可以改写成: 

  var alert = new Alert({a:0, b:1, c:2, d:3, e:4});