美文网首页
《JavaScript 语言精粹》笔记

《JavaScript 语言精粹》笔记

作者: 记录录 | 来源:发表于2019-01-08 11:37 被阅读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. 处理不需要的属性

    • 检查并丢弃值为函数的属性值(typeof
    • hasOwnPropety 方法(若对象拥有独有的属性,返回true
    1. 用枚举for in属性名出现的顺序是不确定的;要确保特定的顺序,可以使用数组+for

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

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

    13. 减少全局变量污染

    • 为应用只创建一个唯一的全局变量(把全局性的资源都纳入一个名称空间之下)
    • 闭包

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

    相关文章

      网友评论

          本文标题:《JavaScript 语言精粹》笔记

          本文链接:https://www.haomeiwen.com/subject/exkvrqtx.html