- 浏览: 141685 次
文章分类
最新评论
对于初学编程语言的朋友来说,经常会犯一些比较“经典”的错误。在这一系列文章中,我们将介绍如何让初学编程的朋友避免一些基本的错误,并且了解如何正确的编程和开发代码。
这一篇文章中,我们介绍5个javascript代码开发中需要注意的问题和技巧。
冗余的DOM操作
DOM操作众所周知是比较重量级的。有效的限制交互可以大大的帮助你提高你的代码的性能。看看下面这段代码:
// anti-pattern
for (var i = 0; i < 100; i++){
var li = $(“<li>”).html(“This is list item #” + (i+1));
$(“#someUL”).append(li);
}
这段代码循环修改DOM100次,但是创建了100个jQuery对象。更好的方式是使用document片段,或者创建一个String来包含100个
元素,然后再添加到DOM中去。这里你只需要执行一次DOM操作。
优化后的代码:
var liststring = “”;
for (var i = 100; i > 0; i--){
liststring += “<li>This is list item #” + (99- i);
}
document.getElementById(“someUL”).innerHTML(liststring);
以上代码只调用了一次DOM操作,但是大量使用了字符串的连接操作。除了使用字符串连接,我们可以使用数组来显示。
var liststring = “<li>”
var lis = [];
for (var i = 100; i > 0; i--){
lis.push(“This is list item #” + (99- i));
}
liststring += lis.join(“</li><li>”) + “<li>”;
document.getElementById(“someUL”).innerHTML(liststring);
当创建大量的字符串时,保存每一个字符串到数组里,然后调用join()方法来连接。在javascript中,这是不使用模板类库和框架外的最高效的字符串连接操作方式。
变量和方法名不一致
这可能不是一个性能问题,但是对于编程来说非常重要,特别是当你需要维护别人的代码。看看如下例子:
var foo = “bar”;
var plant = “green”;
var car = “red”;
如果你再添加一个变量叫“something”可能就不是那么合适了,你应该保持命名的一致。这也就是为什么在一些编程语言中,我们使用大写变量名来代表常量。
对于方法来说,我们也需要保持一致,如下:
function subtractFive(number){
return number - 5;
}
如果你有一个以上的减5方法,那么你如果定义加5方法的话,应该使用如下命名方式:
function addFive(number){
return number + 5;
}
有时候如果你定义一个返回方法,那么一般使用getXXX(),如果你只是执行操作不返回,那么最好使用doXXX()方法名。
构造器方法最好使用类似其它语言的命名方式,首字母大写,如下:
function Gbin1(color){
this.color = color;
}
不管怎么,你都应该尽量的让你的命名更加富有意义,能够给别人更多的信息。
在for..in循环中使用 hasOwnProperty 方法
在javascript中数组是不关联的。而对象来说是hashtable类型的。你可以使用for 。.. in循环来迭代对象属性。如下:
for (var prop in someObject) {
alert(someObject[prop]); // alert‘s value of property
}
但是问题在于,以上代码会循环proptype chain中的所有的属性,有时候这样会出错,你可能只想使用实际存在的属性。使用hasOwnProperty方法可以帮助你解决这个问题。
for (var prop in someObject) {
if (someObject.hasOwnProperty(prop)) {
alert(someObject[prop]); // alert‘s value of property
}
}
这个方法可以帮助你得到实际存在的属性值。
比较boolean值
比较boolean值非常浪费计算时间。看看下面这个例子:
if (foo == true) {
// do something for true
} else {
// do something for false
}
注意上面的==true条件,这个非常没有必要因为foo本身就是boolean值。如果比较,应该使用如下代码:
if (foo) {
// do something for true
} else {
// do something for false
}
或者测试foo为false,如下:
if (!foo) {
// do something for true
}else {
// do something for false
}
事件绑定
事件在javascript中是非常的复杂的话题。以往我们使用行内oncick事件的时代已经过去了。。
我们应该使用事件bubbling或者delegation。
举个例子,如果我们需要让一组图片展示到lightbox window里。那么下面这段代码你绝对不应该使用。
这里我们使用jQuery作为例子。
HTML:
<div id=“grid-container”>
<a href=“someimage.jpg”><img src=“someimage-thumb.jpg”></a>
<a href=“someimage.jpg”><img src=“someimage-thumb.jpg”></a>
<a href=“someimage.jpg”><img src=“someimage-thumb.jpg”></a>
.......
</div>
Javascript(不推荐的写法):
$(‘a’).on(‘click’, function() {
callLightbox(this);
});
这样书写会导致绑定事件到每一个链接元素,最好绑定到指定的图片容器,如下:
$(“#grid-container”).on(“click”, “a”, function(event) {
callLightbox(event.target);
});
避免冗余的比较
在javascript和PHP中:
// javascriptreturn foo.toString() !== “” ? true : false;
// php
return (something()) ? true : false;
但是条件比较永远返回true或者false,所以你没有必要清楚的添加返回值。以下代码即可:
// javascriptreturn foo.toString() !== “”;
// php
return something();
希望大家能够理解并且了解如何避免代码书写中的问题,如果你有其它的例子,请与我们分享!
发表评论
-
sencha touch 隐藏滚动条样式的几种方式
2014-03-21 21:55 3040可以通过以下几种方式来隐藏滚动条,而又不影响滚动效果 ... -
sencha touch textarea 手机上不显示滚动条,且不能滚动
2014-03-21 21:53 3390最近在项目中发现 sencha touch 中的 texta ... -
js Unicode编码转换
2014-03-11 16:37 540js Unicode编码转换 /**js Un ... -
Jquery滚动条定位插件
2014-03-10 15:28 771Jquery滚动条定位插件(jquery.scrollt ... -
js实现雷达扫描效果
2013-11-13 09:23 7252etherdream的原理是使用borderWidth的 ... -
js判断右键菜单和大小写键盘是否锁定
2013-10-24 13:11 2266How do you tell if caps lock i ... -
js数组的扩展方法
2013-08-05 09:53 81371、用于清空数组 Array.prototype. ... -
js脚本
2013-07-03 21:22 942<ignore_js_op style=" ... -
数组排序
2013-05-16 11:00 538冒泡排序 Array.prototype ... -
位运算
2012-12-19 15:30 623在ECMAScript中所有的运算都是64位格式进行存储的,但 ... -
js时间运算
2012-12-05 15:41 606today.getYear()函數在IE ... -
js数据与速度优化(翻译)
2012-10-25 15:19 0javascript操作DOM树最好是一次性的进行,如果在 ... -
ScrollView图片轮转之iscoll插件解析
2012-09-05 18:10 0声明:本插件是从iscroll4官方文档中获取的,如有需要可以 ...
相关推荐
尽管这种方法可以避免错误提示对用户的干扰,但如果错误频繁发生,还是建议优先解决这些问题,而不是仅仅通过屏蔽来掩盖。 综上所述,虽然“屏蔽一切JS错误”的方法能够在一定程度上改善用户体验,但在实际开发中...
JavaScript,简称JS,是Web开发中的重要脚本语言,用于实现客户端的动态效果和交互。在编程过程中,理解和处理JS错误至关重要,因为它们可以帮助我们识别并修复代码中的问题。以下是一些关于JS技巧和错误对照表的...
### JavaScript中的错误处理 在JavaScript编程中,错误处理是一项重要的技术,它可以帮助开发者捕捉并解决程序执行过程中出现的问题。本文将详细介绍如何在JavaScript中捕获和处理错误。 ### Error基类 ...
2. **Vuelidate**:针对Vue.js的轻量级状态验证工具,支持自定义错误消息和复杂的验证逻辑。 3. **Formik**:适用于React的表单管理库,包含强大的验证功能。 六、无障碍性(Accessibility) 1. **ARIA属性**:...
在JavaScript(JS)中,验证错误信息是网页前端开发中不可或缺的部分。这通常涉及到用户输入数据的检查,确保数据的有效性和安全性。"js验证错误信息.rar" 包含的资源显然是一个封装了验证功能的JS类,适用于文本框...
JavaScript,简称JS,是网页开发中的重要脚本语言,它允许开发者实现动态效果和交互功能。在实际开发中,常见的错误和编码规范是确保代码质量和兼容性的重要因素。以下是一些关于JS开发的关键知识点和技巧: 1. **...
在IT行业中,JavaScript是网页开发不可或缺的一部分,而作为曾经占据主导地位的浏览器,Internet Explorer(IE)在处理JS错误时的特性和问题也一直是开发者关注的重点。本文将深入探讨“IE的js错误查找小工具”这一...
在JavaScript编程过程中,为了提升用户体验或者避免因错误信息泄露服务器信息,有时我们需要对浏览器执行脚本时出现的错误进行屏蔽处理。本文将详细介绍如何利用一行JavaScript代码来实现脚本错误的屏蔽,帮助开发者...
"JavaScript中常见错误分析" JavaScript是一种新型的描述语言,可以被嵌入HTML的文件...JavaScript中的错误是不可避免的,但是通过学习和掌握正确的编程技巧和错误处理方法,可以减少错误的出现,提高编程效率和质量。
在IT行业中,JavaScript(JS)是网页开发中的关键语言,而Firefox Firebug是一...同时,保持软件更新和使用良好的编程实践也是避免错误的关键。当遇到问题时,不要害怕使用调试工具,它们能帮助你快速定位并解决错误。
在使用monitors-js时,注意避免过度监控,以免影响应用性能。合理的配置和错误过滤策略是必要的。同时,确保错误报告服务器能承受大量的请求,以防止在高并发场景下出现问题。 总的来说,monitors-js作为一款轻量级...
了解并避免这些常见的JavaScript错误能够提高代码质量和性能,同时减少调试时间。在编写JavaScript代码时,始终关注变量的作用域、数据类型、数组操作以及闭包的正确使用,是提高代码质量的关键。通过不断学习和实践...
JavaScript是一种动态类型的语言,这意味着在编写代码时,错误和异常的发生是难以避免的。为了确保程序的健壮性,JavaScript提供了一套完整的错误处理机制,使得开发者能够捕获、处理和恢复从语法错误到逻辑错误的...
因此,在编写JavaScript程序时,程序员应该注意变量的类型,避免类型混淆。 总的来说,JavaScript的BUG和错误处理是编程中一项非常重要的工作。通过合理利用严格模式和在编码时注意变量类型和逻辑设计,可以大大...
在Node.js中,错误处理是程序健壮性的重要组成部分,因为任何编程环境中,错误和异常都是难以避免的。本课程的3个课时主要聚焦于Node.js中的错误处理机制,帮助开发者理解并有效地管理可能出现的问题。 第一课时:...
确保变量名的正确性是避免这类错误的关键。 5. **空输入检查:** 当用户没有输入任何值时,应该给出提示。检查 `num.value.length` 是否小于 `1` 是一种有效的验证方式。如果输入为空,程序应显示提示并聚焦到...
在JavaScript中,DOM事件处理程序的...同时,通过持续实践和测试,可以避免这些低级错误,提高代码质量。在编写类似`event.js`这样的库时,应该进行详尽的测试,特别是在不同浏览器上,以确保所有功能都能按预期工作。
2. **错误捕获**:在适当的层级捕获错误,避免让未处理的错误导致程序崩溃。 3. **错误日志记录**:对于所有捕获的错误,都应该记录下来以便后续诊断。 4. **优雅关闭**:处理完错误后,确保所有打开的资源都能够被...
- **使用合适的错误类型**:JavaScript提供了多种错误类型,如`TypeError`、`ReferenceError`等,应根据实际情况选择合适的一种。 - **避免过度使用`try...catch`**:过度使用可能会隐藏代码中的问题,只应在必要的...
5. **异常处理**:在处理异常时,应尽量避免使用空的`catch`语句,这样做可能会隐藏程序的错误,使得调试变得困难。 6. **自定义异常**:使用`throw`语句时,最好提供一个错误信息或抛出一个`Error`对象,有助于...