蒙狼科技logo
设为首页| 联系我们
咨询热线: 13917498722
  您的位置: 首页 > 网站资讯 > 初学者应该了解的编程陷阱javascript篇

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

发布日期:2017/6/20

百度权重查询 站长交易 友情链接交换 网站监控 服务器监控 seo监控

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

这一篇文章中,我们介绍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();

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

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





其他相关文章
  • 怎么行使百度推广平台做推广
  • 如何注意常见的优化细节问题
  • SEO优化工作
  • 建设商城类的网站应做好五个方面
  • 影响网站收录的因素具体有哪些
  • 什么是域名过户




  • 企业网站后台使用
    购物网站后台使用
    网站产品图片的处理



    农业银行支付
    建设银行支付
    邮政储蓄银行支付



    企业网站建设
    整站建设
    购物网站



    企业网站建设建议
    注册适合自己的域名
    什么是虚拟主机




    售前咨询QQ: 838821345
    售后服务QQ: 464698733
    应急手机:13917498722


    微信扫一扫
    添加24小时微信客服


    邮箱:lang@MENGL.CN
    地址:上海宝山区城银路555弄2号楼3楼
    ICP备案:沪ICP备12042844号-3
     沪公网安备:31011402002917号
    做网站 | 企业网站建设 | 上海做网站 | 企业网站制作 | 做网站的公司 | 关于蒙狼 | 整站建设 | 购物网站 | 企业网络营销 | 成功案例 | 加盟代理 | 在线订单
    服务区域: 临港新区做网站 徐汇做网站 闵行做网站 长宁做网站 虹口做网站 黄浦做网站 卢湾做网站 静安做网站 浦东做网站 杨浦做网站 普陀做网站 闸北做网站 宝山做网站 嘉定做网站 松江做网站 昆山做网站
    Copyright 2012-2025 上海蒙狼网络科技有限公司 WWW.MENGL.CN All Rights Reserved