当前位置:首页>管理咨询>如保学好JavaScript?初学者应注意的七个细节 查询:
     
如保学好JavaScript?初学者应注意的七个细节

每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的。本文利列举了JavaScript初学者应该注意的七个细节,与大家分享。

一、简化代码

JavaScript定义对象和数组非常简单,我们想要创建一个对象,一般是这样写的:

varcar=newObject();

car.colour="red";

car.wheels=4;

car.hubcaps="spinning";

car.age=4;

下面的写法可以达到同样的效果:

varcar={

colour:"red",

wheels:4,

hubcaps:"spinning",

age:4

}

后面的写法要短得多,而且你不需要重复写对象名称。

另外对于数组同样有简洁的写法,过去我们声明数组是这样写的:

varmoviesThatNeedBetterWriters=newArray(

"Transformers","Transformers2","Avatar","IndianaJones4"

);

更简洁的写法是:

varmoviesThatNeedBetterWriters=[

"Transformers","Transformers2","Avatar","IndianaJones4"

];

对于数组,还有关联数组这样一个特别的东西。你会发现很多代码是这样定义对象的:

varcar=newArray();

car["colour"]="red";

car["wheels"]=4;

car["hubcaps"]="spinning";

car["age"]=4;

这太疯狂了,不要觉得困惑,“关联数组”只是对象的一个别名而已。

另外一个简化代码的方法是使用三元运算符,举个例子:

vardirection;

if(x200){

direction=1;

}else{

direction=-1;

}

我们可以使用如下的代码替换这种写法:

vardirection=x200?1:-1;

二、使用JSON作为数据格式

伟大的DouglasCrockford发明了JSON数据格式来存储数据,你可以使用原生的javascript方法来存储复杂的数据而不需要进行任何额外的转换,例如:

varband={

"name":"TheRedHotChiliPeppers",

"members":[

{

"name":"AnthonyKiedis",

"role":"leadvocals"

},

{

"name":"Michael"Flea"Balzary",

"role":"bassguitar,trumpet,backingvocals"

},

{

"name":"ChadSmith",

"role":"drums,percussion"

},

{

"name":"JohnFrusciante",

"role":"LeadGuitar"

}

],

"year":"2009"

}

你可以使用在JavaScript中直接使用JSON,甚至作为API返回的一种格式,在许多的API中被应用,例如:

divid="delicious"divscript

functiondelicious(o){

varout="ul";

for(vari=0;io.length;i++){

out+="liahref=""+o[i].u+"""+

o[i].d+"ali";

}

out+="ul";

document.getElementById("delicious").innerHTML=out;

}

cript

scriptsrc="?count=15callback=delicious"cript

这里调用delicious的Web服务获取最新书签,以JSON格式返回,然后将它们显示成无序列表的形式。

从本质上讲,JSON是用于描述复杂的数据最轻量级的方式,而且直接它运行在浏览器中。你甚至可以在PHP中调用json_decode()函数来使用它。

三、尽量使用JavaScript原生函数

要找一组数字中的最大数,我们可能会写一个循环,例如:

varnumbers=[3,342,23,22,124];

varmax=0;

for(vari=0;inumbers.length;i++){

if(numbers[i]max){

max=numbers[i];

}

}

alert(max);

其实,不用循环可以实现同样的功能:

varnumbers=[3,342,23,22,124];

numbers.sort(function(a,b){returnb-a});

alert(numbers[0]);

而最简洁的写法是:

Math.max(12,123,3,2,433,4);returns433

你甚至可以使用Math.max来检测浏览器支持哪个属性:

varscrollTop=Math.max(

doc.documentElement.scrollTop,

doc.body.scrollTop

);

如果你想给一个元素增加class样式,可能原始的写法是这样的:

functionaddclass(elm,newclass){

varc=elm.className;

elm.className=(c==="")?newclass:c+""+newclass;

而更优雅的写法是:

functionaddclass(elm,newclass){

varclasses=elm.className.split("");

classes.push(newclass);

elm.className=classes.join("");

}

四、事件委托

事件是JavaScript非常重要的一部分。我们想给一个列表中的链接绑定点击事件,一般的做法是写一个循环,给每个链接对象绑定事件,HTML代码如下:

h2GreatWebresourcesh2

ulid="resources"

liahref=""OperaWebStandardsCurriculumali

liahref=""Sitepointali

liahref=""AListApartali

liahref=""YUIBlogali

liahref=""Blameitonthevoicesali

liahref=""Oddlyspecificali

ul

脚本如下:

Classiceventhandlingexample

(function(){

varresources=document.getElementById("resources");

varlinks=resources.getElementsByTagName("a");

varall=links.length;

for(vari=0;iall;i++){

Attachalistenertoeachlink

links[i].addEventListener("click",handler,false);

};

functionhandler(e){

varx=e.target;Getthelinkthatwasclicked

alert(x);

e.preventDefault();

};

})();

更合理的写法是只给列表的父对象绑定事件,代码如下:

(function(){

varresources=document.getElementById("resources");

resources.addEventListener("click",handler,false);

functionhandler(e){

varx=e.target;getthelinktha

if(x.nodeName.toLowerCase()==="a"){

alert("Eventdelegation:"+x);

e.preventDefault();

}

};

})();

五、匿名函数

关于JavaScript的最头疼的事情之一是,它的变量没有特定的作用范围。一般情况下,任何变量,函数,数组或对象都是全局性,这意味着在同一页上的其他脚本可以访问并覆盖它们。解决方法是把变量封装在一个匿名函数中。例如,下面的定义将产生三个全局变量和和两个全局函数:

varname="Chris";

varage="34";

varstatus="single";

functioncreateMember(){

[...]

}

functiongetMemberDetails(){

[...]

}

封装后如下:

varmyApplication=function(){

varname="Chris";

varage="34";

varstatus="single";

return{

createMember:function(){

[...]

},

getMemberDetails:function(){

[...]

}

}

}();

myApplication.createMember()and

myApplication.getMemberDetails()nowworks.

这被称为单体模式,是JavaScript设计模式的一种,这种模式在YUI中用得非常多,改进的写法是:

varmyApplication=function(){

varname="Chris";

varage="34";

varstatus="single";

functioncreateMember(){

[...]

}

functiongetMemberDetails(){

[...]

}

return{

create:createMember,

get:getMemberDetails

}

}();

myApplication.get()andmyApplication.create()nowwork.

六、代码可配置

你写的代码如果想让别人更容易进行使用或者修改,则需要可配置,解决方案是在你写的脚本中增加一个配置对象。要点如下:

1、在你的脚本中新增一个叫configuration的对象。

2、在配置对象中存放所有其它人可能想要去改变的东西,例如CSS的ID、class名称、语言等等。

3、返回这个对象,作为公共属性以便其它人可以进行重写。

七、代码兼容性

兼容性是初学者容易忽略的部分,通常学习Javascript的时候都是在某个固定的浏览器中进行测试,而这个浏览器很有可能就是IE,这是非常致命的,因为目前几大主流浏览器中偏偏IE对标准的支持是最差的。最终用户看到的结果也许就是,你写的代码在某个浏览器无法正确运行。你应该把你的代码在主流的浏览器中都测试一下,这也许很费时间,但是应该这样做。


地下室桩头防水构造节点图脚手架刚性连墙件构造示意图及施工节点图
幕墙转角节点详图1如何选一扇好木门 三招助你找到好产品
某河道大树种植施工组织设计(四)施工项目成本管理之我见
建筑工程项目管理成本控制之我见高碾压混凝土拱坝施工工艺
《合同法》总则的主要内容:合同订立河道水毁修复工程施工方案(堤防)
项目经理,项目的灵魂《合同法》总则的主要内容:合同终止
让管理者对“管理坏行为”说“再见”建筑工程模板工程施工方案(33页)
梁、柱接头节点平面及剖面图南水北调渠道混凝土衬砌施工技术方案
信息发布:广州名易软件有限公司 http://www.myidp.net
  • 名易软件销售服务
  • 名易软件销售服务
  • 名易软件技术服务

  • 如保学好JavaScript?初学者应注意的七个细节,如保学好JavaScript?初学者应注意的七个细节