编写高质量JavaScript代码的基本要点(1)(5)
parseInt()下的数值转换(Number Conversions with parseInt())
使用parseInt()你可以从字符串中获取数值,该方法接受另一个基数参数,这经常省略,但不应该。当字符串以”0″开头的时候就有可能会出问 题,例如,部分时间进入表单域,在ECMAScript 3中,开头为”0″的字符串被当做8进制处理了,但这已在ECMAScript 5中改变了。为了避免矛盾和意外的结果,总是指定基数参数。
- var month = "06",
- year = "09";
- month = parseInt(month, 10);
- year = parseInt(year, 10);
此例中,如果你忽略了基数参数,如parseInt(year),返回的值将是0,因为“09”被当做8进制(好比执行 parseInt( year, 8 )),而09在8进制中不是个有效数字。
替换方法是将字符串转换成数字,包括:
- +"08" // 结果是 8
- Number("08") // 8
这些通常快于parseInt(),因为parseInt()方法,顾名思意,不是简单地解析与转换。但是,如果你想输入例如“08 hello”,parseInt()将返回数字,而其它以NaN告终。
编码规范(Coding Conventions)
建立和遵循编码规范是很重要的,这让你的代码保持一致性,可预测,更易于阅读和理解。一个新的开发者加入这个团队可以通读规范,理解其它团队成员书写的代码,更快上手干活。
许多激烈的争论发生会议上或是邮件列表上,问题往往针对某些代码规范的特定方面(例如代码缩进,是Tab制表符键还是space空格键)。如果你是 你组织中建议采用规范的,准备好面对各种反对的或是听起来不同但很强烈的观点。要记住,建立和坚定不移地遵循规范要比纠结于规范的细节重要的多。
缩进(Indentation)
代码没有缩进基本上就不能读了。唯一糟糕的事情就是不一致的缩进,因为它看上去像是遵循了规范,但是可能一路上伴随着混乱和惊奇。重要的是规范地使用缩进。
一些开发人员更喜欢用tab制表符缩进,因为任何人都可以调整他们的编辑器以自己喜欢的空格数来显示Tab。有些人喜欢空格——通常四个,这都无所谓,只要团队每个人都遵循同一个规范就好了。这本书,例如,使用四个空格缩进,这也是JSLint中默认的缩进。
什么应该缩进呢?规则很简单——花括号里面的东西。这就意味着函数体,循环 (do, while, for, for-in),if,switch,以及对象字面量中的对象属性。下面的代码就是使用缩进的示例:
- function outer(a, b) {
- var c = 1,
- d = 2,
- inner;
- if (a > b) {
- inner = function () {
- return {
- r: c - d
- };
- };
- } else {
- inner = function () {
- return {
- r: c + d
- };
- };
- }
- return inner;
- }
花括号{}(Curly Braces)
花括号(亦称大括号,下同)应总被使用,即使在它们为可选的时候。技术上将,在in或是for中如果语句仅一条,花括号是不需要的,但是你还是应该总是使用它们,这会让代码更有持续性和易于更新。
想象下你有一个只有一条语句的for循环,你可以忽略花括号,而没有解析的错误。
- // 糟糕的实例
- for (var i = 0; i < 10; i += 1)
- alert(i);
但是,如果,后来,主体循环部分又增加了行代码?
- // 糟糕的实例
- for (var i = 0; i < 10; i += 1)
- alert(i);
- alert(i + " is " + (i % 2 ? "odd" : "even"));
第二个alert已经在循环之外,缩进可能欺骗了你。为了长远打算,最好总是使用花括号,即时值一行代码:
- // 好的实例
- for (var i = 0; i < 10; i += 1) {
- alert(i);
- }
if条件类似:
- // 坏
- if (true)
- alert(1);
- else
- alert(2);
- // 好
- if (true) {
- alert(1);
- } else {
- alert(2);
- }






