`
zccst
  • 浏览: 3315528 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Javascript语言精粹-毒瘤和糟粕

阅读更多
作者:zccst
Javascript是一门语言,用久了肯定能够发现其中的好与不好的地方。不过大多数普通人没那么细心,所以也就忽略了,很难说出一二三来。但对于极客版的牛人就不同了,他们理解的远比普通人透彻。



二、糟粕(轻微)





一、毒瘤(严重)
1,全局变量
var foo = value;
window.foo = value;
foo = value;
隐患是很多时候是忘加var了


2,作用域
没有块级作用域,所以最好在开头部分声明所有变量。
而不是其他语言延迟声明。

3,自动插入分号
return
{
};
改成 return {
}

4,保留字
用在对象的key时,保留字需要加引号
不能用在点表示法中。

5,Unicode
Unicode把一对字符视为单一的字符,而js认为一对字符是两个不同的字符。

6,typeof
typeof null 返回的是object,以致无法判断到底是null,还是空对象。
对于null,可以用 my_value === null
对于空对象,用 if(my_value && typeof my_value === null){}

7,parseInt
遇到非数字会自动截掉,所以parseInt("16")与parseInt("16 tons")结果相同。
parseInt("16", 10);//因为遇0开头总认为是8进制,所以最好总加上基数参数。

8,浮点数
0.1+0.2不等于0.3,所以最好先乘以100,算完后再除以100

9,NaN
//isNaN() 函数用于检查其参数是否是非数字值。
//isFinite() 函数用于检查其参数是否是无穷大
typeof NaN === 'number'; //true
判断是否是一个数字,可以用:
var isNumber = function (value){
    return typeof value === 'number' && isFinite(value);
}

10,伪数组
typeof不能辨别数组和对象。要判断一共值是否为数组,还需要检查他的constructor属性:
if(my_value && typeof my_value === 'object' && my_value.constructor === Array){
    //my_value是一共数组
}

11,假值
0          ->  Number
NaN        ->  Number
''         ->  String
false      ->  Boolean
null       ->  Object
undefined  ->  Undefined

12,hasOwnProperty
由于hasOwnProperty是一共方法,而不是一个运算符,所以在任何对象中,他可能会被一个不同的函数甚至一个非函数的值所替换:
var another_stooge.hasOwnProperty = null; //地雷
for (var name in another_stooge){
    if ( another_stooge.hasOwnProperty(name) ) {//触雷
        document.writeln( name + ': '+another_stooge[name] );
    }
}

13,对象
由于对象永远不会是真的空对象,因为他们可以从原型链中取得成员属性。有时那会带来麻烦。例如计算一段文斌每个单词出现次数。此时单词种可能包含constructor等关键词导致计算异常。
例子详见原书。




如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    JavaScript语言精粹(JavaScript.The.Good.Parts)

    作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。 《JavaScript语言精粹(修订版)》是一本介绍JavaScript 语言本质的专业...

    JavaScript语言精粹

    作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。, 这是一本介绍 JavaScript 语言本质的权威书籍,值得任何正在或准备从事...

    JavaScript语言精粹(修订版)(azw3,epub版)

    azw3格式是kindle正版破解的,epub格式是无损转换,这保证了他在阅读软件上...作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。

    《JavaScript语言精粹[修订版]》高清版_2012.09_【蝴蝶书】_172页完整版

    作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。  《JavaScript语言精粹(修订版)》是一本介绍JavaScript 语言本质的...

    JavaScript语言精粹(修订版)

    作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。这是一本介绍JavaScript 语言本质的权威书籍,值得任何正在或准备从事...

    JavaScript语言精粹[修订版]_中文_书签

    作者还通过附录列出了这门语言的毒瘤和糟粕部分,且告诉你如何避免它们。最后还介绍了JSLint,通过它的检验,能有效地保障我们的代码品质。 这是一本介绍 JavaScript 语言本质的权威书籍,值得任何正在或准备从事...

Global site tag (gtag.js) - Google Analytics