编程语言
首页 > 编程语言> > JavaScript语言精粹-读书笔记(4)

JavaScript语言精粹-读书笔记(4)

作者:互联网

附录A 毒瘤

点击链接获取更多资料

全局变量

全局变量可能造成内存泄漏;大型程序中可能和另一个变量名冲突;可以被程序的任何部分在任何时间修改(降低了程序的可靠性)

定义全局变量的三种方法:在函数外部使用 var foo = value; 给全局对象window增加一个属性 window.foo = value; 使用未声明的变量(隐式全局变量,会造成很大的麻烦)

作用域

JS具有代码块,但是没有块级作用域。其他语言中,声明变量在第一次使用是,在JS中可以在每个函数开头部分声明变量。

自动插入分号

如果return后没有加分号,就会自动增加分号 return; 返回一个undefined

typeof

typeof(null) => Object 所以不能用这种方法检测null

可以使用 null === null (true) 检测null

对于正则表达式,大部分浏览器返回 object

parseInt

parseInt 会把字符串转化成整数,如果遇到非字符就会停止解析。parseInt(‘16 tons’) => 16.

s如果遇到的字符串第一个是0,parseInt 会按照八进制转换,这可能造成错误。

parseInt(‘089’) => 0

解决 parseInt(‘089’, 10) => 89 按照十进制进行转化。

加法

确保加法的两个数都是整数。如果计算货币需要圆角分,需要先转化成分进行计算(之后再还原成元)。

NaN

计算错误会产生NaN。如果一个计算结果是NaN,那么可能输入项或者计算过程中产生了NaN。可以使用 isNaN 判断。

isNaN('oop'); //true
isNaN('0'); //false
伪数组

JS 中的数组实际上是对象。不需要考虑越界的问题,但是性能比C语言中的数组差很多。判断数据不能使用 typeof,需要判断 constructor.

if (my_value && typeof(my_value) === 'object' && my_value.constructor === Array) {
  console.log('parameter is an array');
}

函数参数构成伪数组 arguments 不是一个数据,是一个对象,具有 length 属性。

hasOwnProperty 是对象的一个方法,可以判断对象内部是否有一个键;但是这个方法可以被更改(object.hasOwnProperty = null;),此时就会出错。

附录B 糟粕

避免使用 ==

两个等号比较时,如果变量类型不同会强制转换,这些规则很复杂。所以尽量避免使用两个等号,最好使用三个等号。

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

避免使用 with 语句

避免使用 eval 语句

避免在函数参数中传递字符串

减少使用 continue

减少使用 switch_case 穿越(两种情况对应一个结果,不写 return 语句。)这样在 JSLint监测效果不好

尽量使用代码块(if while) 避免因为换行程序错误。因为JS中空格不严格限制。

附录C JSlint

使用 JSLint 可以减少错误发生(代码行末加入分号等,避免语句错误)

使用 ++ — 避免在前面写空格,因为可能造成 + + 这样的错误

在选择结构中,JSLint不希望出现赋值语句。因为可能是比较语句(a == b) 少写了一个等号造成的赋值语句。

可以避免很多语法问题造成的潜在的bug。

这一点对于自己很有用。在自己的项目中最好可以这个库。

附录 JSON

JSON 主要用于不同语言数据交换。

JSON 对象可以被插入任何数据类型的值,对象可以无限层次的嵌套。但是最好的办法是扁平的数据。其他语言具有映射成JSON对象的数据类型。

可以使用 eval 函数把文本字符串转化成一个有用的数据结构,但是这种方法存在风险。

替代的方法是 JSON.parse 如果内部包含一个危险的数据,就会跑出一个错误。

标签:语句,精粹,读书笔记,JavaScript,value,JSON,使用,parseInt,null
来源: https://blog.csdn.net/weixin_41697143/article/details/90706309