JavaScript编写高质量代码的核心技巧:变量、循环与类型转换
本文深入解析JavaScript编写高质量代码的关键实践。重点探讨变量声明的三种形式:全局变量陷阱、var的作用域差异以及单var声明模式;详细对比for循环与for-in循环的最佳使用场景及性能优化技巧;强调避免隐式类型转换和eval的使用,并规范parseInt基数参数设置,帮助开发者提升代码健壮性与执行效率。
变量声明与全局变量陷阱
一、变量
•全局变量
JavaScript具有两个显著特征,使得意外创建全局变量变得非常容易。首先,开发者甚至可以在不显式声明变量的情况下直接使用它;其次,JavaScript存在隐式全局的概念,即任何未被声明的变量都会自动成为全局对象的一个属性(注意:这并非严格意义上的全局变量,因为可以使用delete操作符将其删除)。
代码如下:
function sum(x,y) {
// result 未声明,为隐式全局变量
result = x + y;
return result;
}
function foo() {
// 使用任务链进行部分var声明,b为隐式全局变量
var a = b = 1;
} 建议:
代码如下:
function (x,y) {
var a ,b ;
a = b = 1;//a,b 为局部变量
} •var作用
通过var关键字创建的全局变量(即在函数外部程序中创建的变量)是无法被删除的。相反,未使用var创建的隐式全局变量(无论其是否在函数内部创建)是可以被删除的。
代码如下:
// 定义三个全局变量
var global_var = 1;
global_novar = 2; // 反面教材
(function () {
global_fromfunc = 3; // 反面教材
}());
// 试图删除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true
// 测试该删除
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined" •单var形式声明变量
在函数顶部使用单一的var语句是一种较为实用的编码形式。所有已声明但未初始化的变量,其初始值均为undefined。
代码如下:
function func() {
var a = 1,
b = 2,
sum = a + b,
myobject = {},
i,
j;
// function body...
} •var散布问题
代码如下:
// 反例
myname = "global"; // 全局变量
function func() {
alert(myname); //"undefined" var myname = "local"; alert(myname); // "local" } func();等同于:
myname = "global"; // global variable
function func() {
var myname; // 等同于 -> var myname = undefined;
alert(myname); // "undefined"
myname = "local";
alert(myname); // "local"}
func(); for循环优化与for-in使用规范
二 for循环
•建议使用
代码如下:
function looper() {
var i = 0,
max,
myarray = [];
// ...
for (i = 0, max = myarray.length; i < max; i++) {
// 使用myarray[i]做点什么
}
} 使用以下表达式代替i++
代码如下:
i = i + 1
i += 1以下两种循环方式更快
//第一种变化的形式:
var i, myarray = [];
for (i = myarray.length; i–-;) {
// 使用myarray[i]做点什么
}
//第二种使用while循环:
var myarray = [],
i = myarray.length;
while (i–-) {
// 使用myarray[i]做点什么
} •for-in循环
for-in循环主要应用于非数组对象的遍历,而对于数组则建议使用常规的for循环。在使用for-in循环遍历对象属性时,应结合hasOwnProperty()方法来过滤掉从原型链继承下来的属性。
类型转换、eval规避与编程规范
三 避免隐式类型转换
•坚持使用===和!==
四 避免使用eval,以及避免给setInterval(), setTimeout()和Function()构造函数传递字符串,用函数代替。
五 parseInt()数值转换
建议给基数参数赋值,
代码如下:
var month = "06",
year = "09";
month = parseInt(month, 10);//开头为0的字符串会被当做8进制处理
year = parseInt(year, 10); 六 编程规范
构造函数命名:MyConstructor();
一般函数命名:myFunction();
变量命名:firstName;
私有属性或方法:_secondeName,
常量:PI,MAX;
WebStorm内置JS代码格式化功能怎么用
2026-11-05 10:10:47
在线JS代码格式化与混淆压缩工具推荐及使用指南
2026-11-03 20:31:53
CodePen、JSFiddle与RunJS对比:哪款在线JavaScript编辑器更好用
2026-11-03 18:52:45
无需安装环境,5款主流JavaScript在线运行工具推荐
2026-11-03 18:23:26
JS怎么将地址栏查询字符串转换为JSON对象
2026-11-03 18:10:29
