《JavaScript 语言精粹》笔记

2019-01-08  本文已影响0人  记录录
《JavaScript 语言精粹(修订版)》
Douglas Crockford 著
北京:电子工业出版社
2012 年 9 月第 2 版

U1 精华

  1. 词法作用域
  1. JavaScript 是一门弱类型的语言,所以 JavaScript 编译器不能检测出类型错误

U2 语法

  1. 没有用的注释比没有注释更糟糕

  2. /* */可能出现在正则表达式字面量里面,所以块注释对于被注释的代码块来说不安全

  3. 没有分离出整数类型,完全避免了短整形的溢出问题

  4. NaN 不等于任何值,包括它自己

isNaN(NaN);  // true
NaN === NaN;  //false
NaN == NaN;  //false
  1. \u 指定数字字符编码("A" === "\u0041"

  2. JavaScript 中的代码块不会创建新的作用域

  3. 假:false、null、undefined、''、0、NaN

  4. break 可以指定一个可选的标签,那退出的就是带该标签的语句(break 和标签之间不能换行)

function foo ()
{
    dance:
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                break dance;
            }
        }
    }
}
  1. typeof 运算数为数组或者 null 时,结果是 'object'

  2. 求模运算

7 % 2  // 1
7 % -2  // 1
-7 % 2  // -1
-7 %-2  // -1

U3 对象

  1. 属性的名字可以是包括空字符串在内的任意字符串

  2. 如果属性名是一个合法的 JavaScript 标识符且不是保留字,则不强制要求用引号括住属性名(JavaScript 的标识符中包含连接符-是不合法的,但允许包含下划线_

var stooge = {
 "first-name": "Jerome",
last_name: "Howard"
}
  1. 对象是可嵌套的

4. ||运算可以用来填充默认值

var middle = stooge["middle-name"] || "(none)";
var status = flight.status || "unknown";

5. && 避免从 undefined 成员属性中取值导致的 TypeError 异常

flight.euipment  // undefined
flight.euipment.model  // throw "TypeError"
flight.euipment && flight.euipment.model  // undefined
  1. 对象通过引用来传递,它们永远不会被复制
var a = {}, b = {}, c = {};  // 每个都引用一个不同的空对象
a = b = c = {};  // 都引用同一个空对象
  1. 原型连接在更新时是不起作用的。当我们对某个对象作出改变时,不会触及该对象的原型

  2. 原型关系是动态的关系(当添加一个新的属性到原型中,该属性会立即对所有属于该原型创建的对象可见)

9. 处理不需要的属性

  1. 用枚举for in属性名出现的顺序是不确定的;要确保特定的顺序,可以使用数组+for

  2. 用枚举for in会列出所有的属性(包括 函数 和 原型中的属性)

  3. delete 不会触及原型链中的任何对象;删除对象的属性可能会让来自原型链中的属性透现出来

13. 减少全局变量污染

----------------------------2019.1.8----------------------------
----------------------------未完待续----------------------------

上一篇下一篇

猜你喜欢

热点阅读