`

初学者应该了解的编程陷阱:javascript篇

阅读更多

日期:2012-12-4  来源:GBin1.com

初学者应该了解的编程陷阱:javascript篇

对于初学编程语言的朋友来说,经常会犯一些比较“经典”的错误。在这一系列文章中,我们将介绍如何让初学编程的朋友避免一些基本的错误,并且了解如何正确的编程和开发代码。

这一篇文章中,我们介绍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个<li/>元素,然后再添加到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中:

//
 javascript

return
 foo.toString() !== "" ? true
 : false
;
    

//
 php

return
 (something()) ? true
 : false
;

但是条件比较永远返回true或者false,所以你没有必要清楚的添加返回值。以下代码即可:

//
 javascript

return
 foo.toString() !== "";


//
 php

return
 something();

希望大家能够理解并且了解如何避免代码书写中的问题,如果你有其它的例子,请与我们分享!

来源:初学者应该了解的编程陷阱:javascript篇

0
0
分享到:
评论

相关推荐

    javascriptDom编程艺术+源码

    这本书和其配套源码对任何想在JavaScript和DOM编程方面提升自己的人都是宝贵的资源,无论是初学者还是有一定经验的开发者,都能从中受益。通过系统学习和实践,读者将能够熟练地利用JavaScript和DOM构建交互性强、...

    400多种Javascript应用实例源码.rar

    通过学习和分析这些源码,开发者不仅可以提升JavaScript技能,还能了解到最佳实践和常见陷阱。每个实例都是一次实战演练,通过模仿和改进,可以逐步提升自己的编程能力。在实际工作中,遇到类似问题时,可以参考这些...

    Effective JavaScript.2014.pdf

    本书不仅适合于那些希望编写更好JavaScript代码的初学者,同时也适用于中级及以上的工程师参考。书中的内容深入浅出,即便是经验丰富的JavaScript开发者也能从中获得新的见解。 从给出的内容片段来看,我们可以提炼...

    javascript

    ### JavaScript:从入门到精通的关键知识点 #### 一、JavaScript概览 JavaScript,作为一种轻量级的编程语言,自诞生以来便迅速成为Web开发领域的核心工具。它是一种基于对象和事件驱动的语言,专为增强HTML网页的...

    我最近在重新学 JavaScript, 巩固一下细节, 也写一个“WTF JavaScript极简入门”,供新人学习.zip

    “WTF JavaScript极简入门”很可能是一份专门为初学者设计的学习资料,旨在通过简洁易懂的方式,帮助新手理解JavaScript中的一些常见陷阱和非直观特性,这些特性在初学者的学习过程中可能会引发困惑,如“WTF”...

    给初学编程者的建议

    学习编程对于初学者来说是一条充满挑战的道路,而正确的学习方法至关重要。以下是一些针对初学者的建议: 1. **理解编程并非计算机技术的全部** 初学者常误以为编程就是计算机技术的核心,但实际上,计算机科学...

    JavaScript the good parts

    这本书不仅适合初学者,也适合有经验的JavaScript开发者,它提醒我们,即使在一门充满挑战的语言中,也能找到优雅和效率。通过学习并实践“好部分”,开发者可以提高自己的编程技能,编写出更高质量的JavaScript代码...

    Effective JavaScript 编写高质量JavaScript代码的68个有效方法1

    《Effective JavaScript:编写高质量JavaScript代码的68个有效方法》是David Herman撰写的一本JavaScript编程指南,该书基于作者在Ecma的JavaScript标准化委员会的工作经验,深入探讨了JavaScript的内部工作机制、...

    JavaScript忍者秘籍源码

    1. **基础语法**:了解JavaScript的基本结构,包括变量声明(var, let, const)、数据类型(字符串、数字、布尔、null、undefined、对象、数组)、运算符(算术、比较、逻辑、赋值)以及条件语句和循环结构。...

    400多种Javascript应用实例源码

    通过深入研究这些源码实例,你不仅能学习到JavaScript的核心知识,还能了解到实际开发中的一些最佳实践和常见陷阱。对于想要提升JavaScript技能或准备面试的开发者来说,这是一个极好的自我学习资源。同时,这些实例...

    javascript经典实例2

    JavaScript,作为全球最广泛使用的编程语言之一,是构建动态网页和交互式应用程序的关键技术。...无论你是初学者还是经验丰富的开发者,深入研究并实践这些"JavaScript经典实例2"中的例子,都将对提升技能大有裨益。

    一本不错的JavaScript教材

    总的来说,这本“一本不错的JavaScript教材”为初学者和有经验的开发者提供了一个全面了解和深入学习JavaScript的平台。它将帮助读者理解JavaScript的核心概念,学会实际应用,并为未来的Web开发奠定坚实的基础。

    javascript宝典

    这本宝典,特别是第四版,旨在帮助读者从初学者到高级开发者,掌握JavaScript的核心概念和技术。JavaScript,作为全球最广泛使用的编程语言之一,尤其在网页开发和前端领域中占据着至关重要的地位。下面,我们将详细...

    Javascript中的陷阱大集合【译】

    这些陷阱可能会让初学者乃至经验丰富的开发者都措手不及。本文将详细探讨一些常见的JavaScript陷阱,并提供相应的解决方案。 #### 双等号(==)与类型强制转换 在JavaScript中,双等号`==`操作符在比较两个值时会...

    Object-oriented-javascript

    在标题“Object-oriented-javascript”和描述“关于javascipt的一本很不错的书,主要是从初级...这本书对初学者来说是一个很好的资源,因为它从基础开始讲解,可以帮助读者构建起面向对象的JavaScript编程的坚实基础。

    Javascript Garden 网页的静态文件

    这个项目是由Bodo Tasche创建的,它详细解释了JavaScript语言的一些复杂性和不直观的行为,对于初学者和有经验的开发者来说,都是一个宝贵的参考资料。下面,我们将深入探讨JavaScript Garden中涵盖的一些关键知识点...

    JavaScript语言精粹 (英文版)

    - **初学者**:适合对JavaScript感兴趣的编程新手,作为入门书籍使用。 - **中级开发者**:适合已经有一定JavaScript基础的开发者,用于深化理解和提高技能水平。 - **高级工程师**:适合资深开发者和架构师,作为...

    Javascript相关书籍从入门到精通

    通过阅读这本书,你可以了解到JavaScript中一些容易被忽视的特性,比如作用域、类型转换和错误处理,从而避免常见的编程陷阱,提高代码质量。 在学习过程中,建议先从《JavaScript.DOM编程艺术》入手,建立起对...

Global site tag (gtag.js) - Google Analytics