文档章节

《javascript语言精粹》读书笔记(四)

倪闯
 倪闯
发布于 2015/03/16 15:45
字数 1267
阅读 162
收藏 5

    本篇对这本书的附录进行摘要。

附录A:糟粕

    A.1全局变量

        全局变量是javascript所有糟糕特性中最糟糕的。

          全局变量是在所有作用域中均可见的变量。如果某些全局变量碰巧和子程序中的变量名称相同,那么他们将互相冲突可能导致程序无法运行,通常还难以调试。

         定义全局变量有3中方式:

        (1)脱离任何函数安排一个var语句:

var foo=value;

        (2)直接添加一个属性到全局对象上,如果是web浏览器,全局对象名是window:

window.foo=value;

        (3)直接使用未经声明的变量,叫做隐式全局变量:

foo=value;

                这种隐式声明全局变量的方式,让初学者很容易出错。

    A.2作用域

        javascript没有块级作用域,只有函数作用域。所以声明一个变量做好的方式是在函数顶部。

    A.3自动插入分号

        比如一个return语句返回一个值,这个值表达式的开始部分必须和return在同一行上,否则会返回undefined。

return
{
    foo:1
};

          正确的方式为:

return{
    foo:1
};

    A.4保留字

        保留字不能被用来命名变量或参数。当被用作对象字面量的键值时,必须用引号括起来

var o={case:true};    //非法
var o={'case':true};    //正确
o['case'];    //正确
o[case];      //错误

    A.5 Unicode

        javascript字符是16位的。Unicode把一对字符视为单一的字符,而javascript认为一对字符是2个不同的字符。

    A.6 typeof

        typeof无法检测出null值:

typeof null=='object';

        typeof对正则表达式的实现也不一致,有的实现是'object',有的是'function'。

    A.7 parseInt

        parseInt在遇到非数字时停止解析,如:

parseInt('12');    //12
parseInt('12 top');    //12

          可以看到输出结果是一样的。

          如果字符串第一位是0,则parseInt会按八进制而不是十进制来解析。所以parseInt('08')会返回0。这样会在解析日志或时间时出现问题。解决方法是:在parseInt中再加一个参数:

parseInt("08",10);    //8

    A.8 +

        +运算符可以做加法运算和字符串连接,这取决于参数的类型。

          在做加法的时候,请确保所有参数是整数。

    A.9 浮点数

        二进制的浮点数不能正确的处理十进制的小数,因此0.1+0.2不等于0.3。幸运的是,浮点数的整数运算是精确的,所以小数表现出来的问题可以通过指定精度避免。

    A.10 NaN

        NaN表示不是一个数字,但下面的表达式是正确的:

typeof NaN === 'number';    //true

        NaN不等于他自己。

NaN === NaN;    //false

        判断一个值是否可用作一个数字的最佳方法是使用isFinite函数,他会筛除掉NaN和Infinity。可以这样定义一个isNumber函数:

function isNumber(value){
    return typeof value === 'number' && isFinite(value);
}

    A.11 伪数组

        javascript没有真正的数组,数组不会产生越界错误。

     A.12 假值

        

        undefined和NaN并不是常量,而是全局变量,并且你可以改变他们的值。千万不要这样做。

        A.13 hasOwnProperty(略)

        A.14对象   

            javascript的对象永远不会用真正的空对象,因为他们可以从原型链中取得成员元素。 


附录B:鸡肋  

        B.1 ==

            ==和!=会在两个运算数数据类型相同是才会比较,否则会先强制转换。

''=='0';    //false
0=='';    //true
0=='0';    //true

false=='false';    //false
false=='0';    //true
false==undefined;    //false
false==null;    //false
null==undefined;    //true

' \t\r\n '==0;    //true

            可以看到,使用==非常混乱,所以尽量使用===和!==比较。

        B.2 with--不要使用它!

      B.3 eval--不要使用它!(降低安全性,难以阅读,效率低)

        B.4  continue--效率低,尽量不要使用!

      B.5 switch贯穿--难以察觉错误,尽量不要使用!

      B.6 缺少块的语句

if(ok)
    t=true;
    advance();

         实际上表达的是:

if(true){
    t=true;
}
advance();

        B.7 ++ --

            尽量不要使用。

        B.8 位运算符--效率非常低,不要使用!

      B.9 function语句对比函数表达式(略)

      B.10 类型的包装对象

            不要使用new Boolean(), new Number(), new String()。

          避免使用new Object(), new Array()。可使用{}和[]来代替。

      B.11 new

            new操作符用来创建一个新对象,并把新创建的对象绑定给了构造器的this对象一旦你忘记了使用new,你得到的是一个普通函数的调用,这是this就会绑定在了全局对象上,这会带来很大的问题。而且编译器也不会报错或警告。

                所以规定构造函数名首字母要大写,还有一个更好的方法就是不去使用new。

        B.12 void--这是一个运算符,返回undefined,避免使用它!


© 著作权归作者所有

倪闯
粉丝 6
博文 9
码字总数 8133
作品 0
朝阳
程序员
私信 提问
JavaScript语言精粹学习笔记(一)

《JavaScript语言精粹》相比《JavaScript权威指南》而言,是一本太薄的书了。然而也许正因为小而精,所以难有权威指南那样阅读起来浅显易懂却又醍醐灌顶般的感觉,语言精粹还是略微感觉有些艰...

小微
2012/12/27
199
0
《javascript语言精粹》读书笔记(一)

第一章 精华 任何语言都有其精华的部分和鸡肋的部分,javascript也不例外,而且鸡肋的部分还很多。但javascript的流行却不受他的质量影响。javascript为何如此流行?因为他是web浏览器的语言...

倪闯
2015/03/11
344
3
javascript语言精粹 读书笔记

这是我目前度过最好的js方面的书,小而精,没有一句废话全是精华。想要全面理解javascript,这本书必读。 P6 避免使用 / /注释 建议使用// P17 对象字面量是一种方便指定新对象的表示方法。属...

lilugirl
2014/01/16
359
3
《javascript语言精粹》读书笔记(三)

从现在起要加快点速度了,书中其实有很多知识对于我来说已经很熟悉了,在此我就简单摘录一下,当然如果非常重要的知识(我认为的,可能有失偏颇),我会写的详细点,可能还会加入我的理解。下...

倪闯
2015/03/13
373
0
《javascript语言精粹》读书笔记(二)

第三章 对象 javascript的简单类型包括数字、字符串、布尔值、null值和undefined值,其他所有的值都是对象。 javascript包含一个原型链特性,允许对象继承另一对象的属性。正确的使用它能减少...

倪闯
2015/03/12
326
2

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
10
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部