zoukankan      html  css  js  c++  java
  • 《JavaScript语言精粹》—— 读书总结

    话说这本书还是同学的推荐才读的,之前感觉这本书太薄了,不值得看,没想到小身材有大智慧,书中的内容总结的还是很到位的!所以就把最后几章,精华的部分整理整理。

    优美的特性

    函数是顶级对象

    在JS中,没有块级作用域,都是以函数为最小的作用域,这样就可以把所有的变量放在函数的顶级声明。同时,也需要注意for循环,与java的使用方法就不一样了。即便是在for循环的体内,或者if语句中,声明的变量也是函数级别的。

    而函数会延长作用域的范围,也就衍生出闭包这种概念,详细的还应该去参考《JS高级程序设计》,那里面讲的比较详细。

    基于原型继承的动态对象

    JS中没有像java一样的面向对象,但是可以通过prototype进行继承,不过直接使用prototype,会导致所有的派生对象都共同使用prototype的属性或者方法。因此在写面向对象的代码时,要注意此类问题。

    毒瘤

    全局变量

    在JS中有三种声明变量的方式:

    第一种,使用var语句声明:

    var foo = value;
    

    第二种,直接给全局对象添加属性

    window.foo = value;
    

    第三种,直接使用未声明的变量

    foo = value;
    

    自动插入分号

    有时候js会自动为我们加入分号,比如:

    return 
    {
    status:true
    };
    

    有可能被解析成这样:

    return ;
    {
    status : true
    };
    

    因此应该保持这种风格:

    return {
    status:true
    };
    

    typeof并不是万能的

    检测null,最好的方法

    value === null
    

    伪数组

    js没有真正的数组,因此不会越界出错。但是检测的时候有些麻烦,最可靠的办法是:

    if(Object.prototype.toString.apply(my_value) === '[object Array]'){}
    

    假值

    Number : 0 NaN
    String : ''
    Boolean: false
    Object : null
    Undefined : undefined
    

    糟粕

    ==

    和!=经常会出现强制转换,再进行比较。因此为了避免出错,比较值时,应该使用=和!==

    with

    with语句的结果有时,很难预料。

    eval

    无论是性能,还是处于安全,都不推荐使用

    continue

    如果去掉它,会发现性能有所提升

    switch

    case条件可能不会跳出,而继续执行。

    缺少块

    if(ok) 
    test1();
    test2();
    

    这种代码有时是因为粗心,有时会给别人带来困惑。不知道是想要执行test1(),还是两个都执行。

    位运算符

    在javascript中,由于并不是像c或者java能接触机器底层,因此位运算也就没有那么高效了。

    new

    在new的时候,是创建一个继承于运算符后卖弄的对象,然后调用该运算符,把新对象绑定给this。但是如果忘记加new,则会把this绑定到全局对象中,造成污染。

  • 相关阅读:
    javascript:history.go()和history.back()的区别
    ASP.NET26个性能优化方法
    20 个 jQuery 分页插件和教程,附带实例
    JQuery中$.ajax()方法参数详解
    记住键盘快捷键大全 提高电脑操作速度
    URL重写案例
    url重写(伪静态)IIS配置图解
    URL重写的优缺点分析
    C# GUID的使用
    js中的编码与解码
  • 原文地址:https://www.cnblogs.com/xing901022/p/4872910.html
Copyright © 2011-2022 走看看