今天小编要跟大家分享的文章是关于为什么Web前端要学习JavaScript最近跟多项目招聘经理都在说找一个好的程序员有多难,也渐渐意识到了现在编程语言越来越倾重于JavaScript。Web开发人员尤其如此。所以,如果你是一个Web前端工程师,那么你应该去学习JavaScript。
原因主要有以下几点:
一、需求
我之所以这样说的主要原因是,随着JavaScript的日渐成熟,以及Nodejs方案变得越来越可行,我们对JavaScript程序员的需求正在持续增长。JavaScript在需求比例上已经超过了C#,仅屈居于Java之下。如果你看看GitHub上可行的项目,你会发现JavaScript出现得越来越多,甚至领先于Java和C#。最后,再看看StackOverflow,你会发现JavaScript也处于顶层活跃中。
二、更好的薪酬
根据SitePoint,JavaScript的薪资要高于C#。当然,虽然现在Java的薪水还是比JavaScript高上那么一点。但随着JavaScript需求的增长,你可以预见它的薪酬肯定会提高。
在Gooroo,关于薪酬VS需求呈现的画面略有不同。虽然我们对JavaScript的需求是显而易见的,但是很明显,几种需求较小的语言反而薪酬更高。我怀疑这是因为许多公司仍然认为JavaScript是任何一个程序员都会用的语言。但是,当他们认识到“任何一个程序员都会JavaScript”,实际上是“任何一个程序员只会写蹩脚的JavaScript代码”的时候,也是他们经历惨痛教训的时候。然后需要真正的JavaScript程序员进入清理留下的烂摊子。
在StackOverflow,我们看到了一份非常详细的关于开发人员在过去三年时间中的归类。当你最后看到“使用的技术”部分的时候,我们发现,如果你称自己为JavaScript程序员(这里假设是在客户端),那么你得到的报酬虽然比C#程序员低,但会比Java程序员要好,但如果你说自己是一个Nodejs程序员(全JavaScript),那么你能拿到第二高的工资。唯一比Nodejs还高的是Objective-C(我假设以后会是,Swift)。
三、JavaScript愈来愈趋成熟
新的JavaScript标准每年都会发布,而且现在很明显,被添加到JavaScript的语法糖(Syntactic
Sugar)的数量每年都在增加。其中一个我期待的功能是,能在我的JavaScript代码中使用异步和await关键字,以消除回调地狱(callback
hell)。
你越早开始学习JavaScript,那么学习起来就越容易。所有的改变都是循序渐进的,就像浏览器正在不断地改进处理JavaScript代码的能力。可以预见在不久的将来,浏览器不仅可以缓存JavaScript文件,还可以缓存JavaScript文件的编译版本。
四、JavaScript的前端更能被委以重任
大概在一年前我和我的一个老朋友聊天的时候,他提到,他是他们小组(约20个程序员)唯一一个用这样的方式写JavaScript以消除变量对全局范围的污染的程序员。这只是最简单的例子。很多人称自己为JavaScript程序员,却不知道这些基本知识。所以,JavaScript大有可为。
而且不要忘了,现在很多支持性能分析和内存泄漏的工具才刚处于起步阶段。如果你现在就掌握了这些技能,那么将来肯定可以更好地推销自己。
五、日趋完善的框架
Angular的新版本正在开发中,而且还有Aurelia作为候选。商业产品如Scencha的EXTjs。还有用于服务器端编程的Nodejs。等等等等。用JavaScript开发实际的应用程序并不太难。我敢保证,如果我愿意的话,我完全可以只用JavaScript来写一个可以运行的桌面应用程序。嘿嘿。
六、6JavaScript无处不在
JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流 *** 作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。而后端代码是用什么编写的则无所谓——不管是Java,PHP,NET,Nodejs还是其他——但是客户端就一定需要一个JavaScript开发人员。事实上,现在很多开发人员依然没有认识到JavaScript有多么强大。不知道正在阅读的你是否也是这些井底之蛙的一员。如果你确实是一个了不起的JavaScript程序员,那么基本上所有有关于服务器端平台的工作都能够胜任。如果再了解这些平台基本上就可以上任了。
七、JavaScript是一种编译语言
这也许会吓你一跳,从技术上说,JavaScript是一种编译语言。这有两个含义。首先,一旦代码被编译,它的运行速度或许就能媲美于任何其他可执行文件。其次,为JavaScript写工具在技术上是可行,并且将会创建一个不必每次加载代码到内存中时就重新编译的二进制文件。
以上就是小编今天为大家分享的关于为什么Web前端要学习JavaScript的文章,希望本篇文章能够对正在从事Web前端工作或者学习的小伙伴们有所帮助。想要了解更多Web前端相关知识记得关注北大青鸟Web培训官网!
原文:7ReasonsEveryProgrammerNeedstoLearnJavaScript
首先,本人在前端开发方面有点心得,有什么不对的地方希望给出建议让我更好的进步
1命名
在开发前必须有个命名规范来对代码统一规范团队代码结构,使代码可读性提高
2注释
我相信每个人看别人代码时看到密密麻麻的代码结构,相信每个人都会很头疼,即使想看也会看不下去,而且很耗时间,所以注释就变得尤其得重要,注释越清楚越详细我相信代码可维护性越高,而且更容易修改维护
3变量
在js中变量无处不在,所以这么声明变量就变得尤其得重要,首先少使用全局变量,这样会增加加载速度,从而导致项目用户体验不好
4声明变量如果不用 var 会导致变量成为全局变量。
5函数
函数的参数数量
函数的参数不应该超过 3 个。如果函数的参数超过 3 个,应该将一些参数进行封装。
6函数参数传递
只传函数需要的参数。如
// 不推荐
function greet(data){
consolelog('Hello, I am ' + dataname);
}
// 推荐
function greet(name){
consolelog('Hello, I am ' + name);
}
7函数的功能
一个函数只做一件事。这有助于测试和代码复用。
函数尽可能无副作用。无副作用指不修改传入的参数和全局变量。
8减少重复代码
记得在某个文章中看到说,如果重复的代码出现 3 次,就应该重构重复的代码。
松耦合
一个函数只做一件事
缓存一些计算结果
9避免全局变量
从分配置和离逻辑代码
不要修改不属于你的对象
不属于你的对象包括
浏览器原生对象,如 Object,Array等
DOM,如 document
BOM,如 window
类库对象
如果想拓展浏览器原生对象的功能,可以创建函数,函数中把浏览器原生对象传入。如 Underscorejs 做 的那样。
10代码风格的统一
11尽可能的避免代码重复
如何减少重复的代码呢?
在JS中,可以将重复的代码写成一个方法,如果是可通用的,可以写在独立的JS文件中。
在CSS中,则需要借助Sass,Less之类的预处理语言的Mixins的功能。将重复的部分写成一个Mixins。
12配置和逻辑分开
JS中,对于整个站的通用配置,写在configjs里。如果是某个js的配置,在文件的开头,用defaultParam 对象来存放可变的配置,用const来定义不可变的配置
CSS中,依旧要借助预处理语言。对于整站的配置,定 义在_variablesscss里。对于某个具体CSS文件里,在文件开头用变量来定义
13减少代码的副作用
1>JS中,方法中的沟通尽量不要用全局变量;不要在Array之类的全局对象的原型链上添加方法;尽量不要定义全局的方法和变量:如果确实有很多变量,方法放在全局上,可以学习jQuery,将很多变量,方法放在一个全局对象上;自定义事件,事件的名称也要有命名空间。
2>CSS中,要做到无副作用,难度很大。对于简单页面,一个方法是,把页面上的元素都分成一个个组件,写样式时,选择器要用组件选择器 当前元素选择器。当组件变的复杂时,组件也会包含很多子组件。然后,选择器就会越来越长。。。我的解决方案是用的BEM。
14提高代码的可读性
变量,方法等的合理命名,通过名称可以知道这个大概做什么的。
如果则要加注释来说明一下。对于不容理解的代码加注释
尽可能不用魔法数字
对于HTML,选择合适标签
15一个方法只做一件事
一来提高代码的复用性,二来让调试也变的更容易,三来让测试变的更容易
今天小编要跟大家分享的文章是关于帮助web前端初学者快速掌握JavaScript技术的方法。当你试图学习JavaScript或其他编程语言的时候,你通常会遇到如下挑战:
·一些概念让你感到困惑,特别是如果之前学过其他类型的语言。
·很难找到学习的时间(或者动力)去学习。
·你很容易忘掉之前学到的东西。
·JavaScript工具太多并且经常更新,以至于很难找到学习的切入点。
幸运的是,这些难题最终能够被克服。在这篇文章,将展示六个能够帮助你更快、更开心、更高效地学习JavaScript的六个思维技巧。下面来和小编一起看一看吧!
1、不要对未来的忧虑干扰你现在的学习
有些JavaScript初学者会问刚开始要学习哪种框架,但是如果你还没能熟练使用原生JavaScript,你就不应该问这种问题。因为你会花很多时间研究各种框架而得不到进步。
走出这个陷阱的一个方法是制定一个学习路径图。例如,要成为前端开发,你的路径图可能是下图。在将来你能够使用HTML和CSS制作动态页面。
将上图步骤分开执行,每个时间段只专注于提高一项技能,你将不会把时间浪费在担心后面的技能上。
2、不要让自信骗你进入持续遗忘的陷阱
快速理解一个概念会是JavaScript进步的最大阻碍,下面我将解释。
当你遇到一个知识点,而你好像理解了,你很可能抑制不住内心跳到下一个知识点的冲动。现实可能是你会理解下一个知识点然后继续跳到下一个知识点。但是,很快你会到达一个节点,在这个节点你发现自己已经忘了前面所学,于是你需要回过头复习,你快速瞟了一下之前所学然后又继续学习新的知识。但是现在,你忘记了其他东西。你一直重复这种继续-回顾-继续-回顾模式直到你发现自己完全迷失。你开始沮丧,想要休息,然后当你开始重振旗鼓,却发现自己已经忘掉所有。
幸运的是,我们有两个应对上述问题的方法:
1、一次只学一样东西
2、做练习-实际上是敲代码
当你学习一个新的概念,你要将它实践出来,练习它,与它和善相处,甚至能够将它与其他概念联系到一起。当你学习一个示例,最重要的是你要自己将代码敲出来,这样能帮助你吸收它。另外,一次只学一个东西能够帮助你巩固所学,因为记忆更少的东西更容易。
这个过程看起来貌似比阅读然后快速跳到下一个知识点要花费更长的时间,但是实际上它所花的时间更少,因为这样你就不需要频繁复习之前所学。我在好几个场合后才艰难的领悟到这个道理。
3、使用正确的思维方式练习
很多人认为敲代码是烦人的重复性工作,所以他们通常会跳过这个步骤试着寻找捷径。如果你试图为JavaScript练习寻找捷径,你将会为此花费更多的时间。但是我们如何才能使得敲代码更加的有趣,使得我们愿意去敲代码呢
试着改变为下面的思维模式:
如果你刚学了一个JavaScript概念,然而你被告知不能使用它,对此你感觉如何个人来说我会感到有点恼火,特别是为了弄懂它我花费了宝贵的时间。这就像是一个小孩得到了一个新的玩具,但却被限制不能玩它。
当你学习JavaScript的新知识,试着将这个知识点视作一个新玩具,例如新车、一双新鞋、或任何你觉得值得有趣的东西。然后,不要把敲代码当成工作,将敲代码视作你正在玩游戏。你正在使用刚学的技能做一些很酷的事情。给自己惊喜,把成果展示给你的朋友。
带着游戏的思维模式你将学得更快,将记忆的更牢,同时你将体会到更多乐趣。
4、使用Facebook技巧为编程腾时间
人们遇到的一个普遍问题是,他们通常找不到时间去敲代码。通常,这些人会花好几个小时浏览例如Facebook、YouTube、Wikipedia或者Reddit这样的网站。无论你是否符合上述描述,我们都能从中学到一些东西。
我当然有时间只浏览Facebook一会儿,但通常我会在上面待好几个小时浏览往返。这是如何发生的我认为原因在于,刚开始我并没打算花在这上面花费那么多时间。开始行动是做一件事情最困难的部分,所以将目标设定的足够小能够帮助我们进入状态。如果有人问我是不是打算花几个小时浏览Facebook,我会回答不,因为我没有时间。然而,对于仅仅尝试一下我是能够接受的,这也是我能够沉浸其中的方法。
好消息是,你能够对敲代码运用同样的心理技巧。不要计划花几个小时敲代码,因为你会发现自己没有时间。相反的,告诉自己只敲三分钟代码。这样你就不需要为寻找敲代码的时间烦心。
5、思考的慢你将学得更快
这一条听起来违反直觉,所以下面我将用一个故事来解释。
我的一个朋友又一次对JavaScript的一个特性感到困惑。我让他将他知道的解释给我听,然后告诉我哪儿让他困惑。当它向我解释代码,我发现他在跳步。
“等会儿!”我说道。“慢慢来,然后将这些一步步解释给我听。”
我的朋友直接将整个代码的功能总结给我听。
我再次让他暂停。“你还是在跳步。再解释一次,这次我需要你一步步将每一行代码发生了什么解释给我听。”
这一次,我的朋友能够更好的解释代码是如何运行的。关键在于他花时间去理解每一行代码而不是试图一下理解所有。
在上述这种案例中,思考的更慢实际上让你学得更快。
6、在写复杂代码前先用简单语言写下
如果你要写的代码是复杂并且不常见的,先用简单语言将代码写下。这样,你能够你能够在真正写之前知道自己要做什么。下面是使用这个方法的两个好处:
1、你将更容易更快速的写代码,因为你不需要时刻停下来思考自己将要怎么做。
2、由于你知道代码要干什么,能够更好的排除错误。
总结:
我们已经讲了好几个更快速学习JavaScript的方法,但是你也能将上述方法运用于学习其他东西。下面是上述方法的概括:
1、不要再想将要学什么,沉浸于现在
2、通过把新技能当做玩具使得练习更有趣
3、就像浏览Facebook、YouTube之类的网站一样,在敲代码前告诉自己只敲几分钟,这样你就拥有了敲代码的时间
4、慢下来,小步向前,你将学得更快
以上就是小编今天为大家分享的关于帮助web前端初学者快速掌握JavaScript技术的方法的文章,希望本篇文章能够对正在从事web前端学习的小伙伴们有所帮助,想要了解更多web前端相关知识记得关注北大青鸟web培训官网,最后祝愿小伙伴们工作顺利,成为一名优秀的web前端工程师。
来源:#/shehui/2016/10-24/11717064html
前端一般都是需要写代码的。
前端包括三大部分:html、css和js。html属于文档标签,css属于布局样式,js则是页面的脚本语言。
html侧重于文档和控件的结构,css侧重于几何图形的布局,js用于 *** 作html和css等页面相关 *** 作。
今天小编要跟大家分享的文章是关于Web前端工程师应该知道的JavaScript的10个难点。相信很多正在学习Web前端知识的小伙伴对于JavaScript存在很多疑问,为了帮助大家更好的学习Web前端知识,成为一名优秀的web前端工程师,今天小编为大家分享了这篇Web前端应该知道的JavaScript难点的问题,下面我们一起看一看吧!
1、立即执行函数
立即执行函数,即ImmediatelyInvokedFunctionExpression
(IIFE),正如它的名字,就是创建函数的同时立即执行。它没有绑定任何事件,也无需等待任何异步 *** 作:
1(function(){
2
3//代码
4
5//
6
7})();
function(){}是一个匿名函数,包围它的一对括号将其转换为一个表达式,紧跟其后的一对括号调用了这个函数。立即执行函数也可以理解为立即调用一个匿名函数。立即执行函数最常见的应用场景就是:将var变量的作用域限制于你们函数内,这样可以避免命名冲突。
2、闭包
对于闭包(closure),当外部函数返回之后,内部函数依然可以访问外部函数的变量。
1(function(){
2
3//代码
4
5//
6
7})();
代码中,外部函数f1只执行了一次,变量N设为0,并将内部函数f2赋值给了变量result。由于外部函数f1已经执行完毕,其内部变量N应该在内存中被清除,然而事实并不是这样:我们每次调用result的时候,发现变量N一直在内存中,并且在累加。为什么呢这就是闭包的神奇之处了!
3、使用闭包定义私有变量
通常,JavaScript开发者使用下划线作为私有变量的前缀。但是实际上,这些变量依然可以被访问和修改,并非真正的私有变量。这时,使用闭包可以定义真正的私有变量:
1functionProduct(){
2
3varname;
4
5thissetName=function(value){
6name=value;
7};
8
9thisgetName=function(){
10returnname;
11};
12}
13
14varp=newProduct();
15psetName("Fundebug");
16
17consolelog(pname);//输出undefined
18consolelog(pgetName());//输出Fundebug
代码中,对象p的的name属性为私有属性,使用pname不能直接访问。
4、prototype
每个JavaScript构造函数都有一个prototype属性,用于设置所有实例对象需要共享的属性和方法。prototype属性不能列举。JavaScript仅支持通过prototype属性进行继承属性和方法。
1functionRectangle(x,y)
2{
3this_length=x;
4this_breadth=y;
5}
6
7RectangleprototypegetDimensions=function()
8{
9return{
10length:this_length,
11breadth:this_breadth
12};
13};
14
15varx=newRectangle(3,4);
16vary=newRectangle(4,3);
17
18consolelog(xgetDimensions());//{length:3,breadth:4}
19consolelog(ygetDimensions());//{length:4,breadth:3}
代码中,x和y都是构造函数Rectangle创建的对象实例,它们通过prototype继承了getDimensions方法。
5、模块化
JavaScript并非模块化编程语言,至少ES6落地之前都不是。然而对于一个复杂的Web应用,模块化编程是一个最基本的要求。这时,可以使用立即执行函数来实现模块化,正如很多JS库比如jQuery以及我们Fundebug都是这样实现的。
1varmodule=(function(){
2varN=5;
3
4functionprint(x){
5consolelog("Theresultis:"+x);
6}
7
8functionadd(a){
9varx=a+N;
10print(x);
11}
12
13return{
14description:"Thisisdescription",
15add:add
16};
17})();
18
19
20consolelog(moduledescription);//输出"thisisdescription"
21
22moduleadd(5);//输出“Theresultis:10”
所谓模块化,就是根据需要控制模块内属性与方法的可访问性,即私有或者公开。在代码中,module为一个独立的模块,N为其私有属性,print为其私有方法,decription为其公有属性,add为其共有方法。
6、变量提升
JavaScript会将所有变量和函数声明移动到它的作用域的最前面,这就是所谓的变量提升(Hoisting)。也就是说,无论你在什么地方声明变量和函数,解释器都会将它们移动到作用域的最前面。因此我们可以先使用变量和函数,而后声明它们。但是,仅仅是变量声明被提升了,而变量赋值不会被提升。如果你不明白这一点,有时则会出错:
1consolelog(y);//输出undefined
2
3y=2;//初始化y
上面的代码等价于下面的代码:
1vary;//声明y
2
3consolelog(y);//输出undefined
4
5y=2;//初始化y
为了避免BUG,开发者应该在每个作用域开始时声明变量和函数。
7、柯里化
柯里化,即Currying,可以是函数变得更加灵活。我们可以一次性传入多个参数调用它;也可以只传入一部分参数来调用它,让它返回一个函数去处理剩下的参数。
1varadd=function(x){
2returnfunction(y){
3returnx+y;
4};
5};
6
7consolelog(add(1)(1));//输出2
8
9varadd1=add(1);
10consolelog(add1(1));//输出2
11
12varadd10=add(10);
13consolelog(add10(1));//输出11
代码中,我们可以一次性传入2个1作为参数add(1)(1),也可以传入1个参数之后获取add1与add10函数,这样使用起来非常灵活。
8、apply,call与bind方法
JavaScript开发者有必要理解apply、call与bind方法的不同点。它们的共同点是第一个参数都是this,即函数运行时依赖的上下文。
三者之中,call方法是最简单的,它等价于指定this值调用函数:
1varuser={
2name:"RahulMhatre",
3whatIsYourName:function(){
4consolelog(thisname);
5}
6};
7
8userwhatIsYourName();//输出"RahulMhatre",
9
10varuser2={
11name:"NehaSampat"
12};
13
14userwhatIsYourNamecall(user2);//输出"NehaSampat"
·apply方法与call方法类似。两者唯一的不同点在于,apply方法使用数组指定参数,而call方法每个参数单独需要指定:
·apply(thisArg,[argsArray])
1varuser={
2greet:"Hello!",
3greetUser:function(userName){
4consolelog(thisgreet+""+userName);
5}
6};
7
8vargreet1={
9greet:"Hola"
10};
11
12usergreetUsercall(greet1,"Rahul");//输出"HolaRahul"
13usergreetUserapply(greet1,["Rahul"]);//输出"HolaRahul"
使用bind方法,可以为函数绑定this值,然后作为一个新的函数返回:
1varuser={
2greet:"Hello!",
3greetUser:function(userName){
4consolelog(thisgreet+""+userName);
5}
6};
7
8vargreetHola=usergreetUserbind({greet:"Hola"});
9vargreetBonjour=usergreetUserbind({greet:"Bonjour"});
10
11greetHola("Rahul")//输出"HolaRahul"
12greetBonjour("Rahul")//输出"BonjourRahul"
9、memoization
Memoization用于优化比较耗时的计算,通过将计算结果缓存到内存中,这样对于同样的输入值,下次只需要中内存中读取结果。
1functionmemoizeFunction(func)
2{
3varcache={};
4returnfunction()
5{
6varkey=arguments[0];
7if(cache[key])
8{
9returncache[key];
10}
11else
12{
13varval=funcapply(this,arguments);
14cache[key]=val;
15returnval;
16}
17};
18}
19
20
21varfibonacci=memoizeFunction(function(n)
22{
23return(n===0||n===1)n:fibonacci(n-1)+fibonacci(n-2);
24});
25
26consolelog(fibonacci(100));//输出354224848179262000000
27consolelog(fibonacci(100));//输出354224848179262000000
代码中,第2次计算fibonacci(100)则只需要在内存中直接读取结果。
10、函数重载
所谓函数重载(method
overloading),就是函数名称一样,但是输入输出不一样。或者说,允许某个函数有各种不同输入,根据不同的输入,返回不同的结果。凭直觉,函数重载可以通过ifelse或者switch实现,这就不去管它了。jQuery之父John
Resig提出了一个非常巧(bian)妙(tai)的方法,利用了闭包。
从效果上来说,people对象的find方法允许3种不同的输入:
0个参数时,返回所有人名;1个参数时,根据firstName查找人名并返回;2个参数时,根据完整的名称查找人名并返回。
难点在于,peoplefind只能绑定一个函数,那它为何可以处理3种不同的输入呢它不可能同时绑定3个函数find0,find1与find2啊!这里的关键在于old属性。
由addMethod函数的调用顺序可知,peoplefind最终绑定的是find2函数。然而,在绑定find2时,old为find1;同理,绑定find1时,old为find0。3个函数find0,find1与find2就这样通过闭包链接起来了。
根据addMethod的逻辑,当flength与argumentslength不匹配时,就会去调用old,直到匹配为止。
1functionaddMethod(object,name,f)
2{
3varold=object[name];
4object[name]=function()
5{
6//flength为函数定义时的参数个数
7//argumentslength为函数调用时的参数个数
8if(flength===argumentslength)
9{
10returnfapply(this,arguments);
11}
12elseif(typeofold==="function")
13{
14returnoldapply(this,arguments);
15}
16};
17}
18
19
20//不传参数时,返回所有name
21functionfind0()
22{
23returnthisnames;
24}
25
26
27//传一个参数时,返回firstName匹配的name
28functionfind1(firstName)
29{
30varresult=[];
31for(vari=0;i
32{
33if(thisnames[i]indexOf(firstName)===0)
34{
35resultpush(thisnames[i]);
36}
37}
38returnresult;
39}
40
41
42//传两个参数时,返回firstName和lastName都匹配的name
43functionfind2(firstName,lastName)
44{
45varresult=[];
46for(vari=0;i
47{
48if(thisnames[i]===(firstName+""+lastName))
49{
50resultpush(thisnames[i]);
51}
52}
53returnresult;
54}
55
56
57varpeople={
58names:["DeanEdwards","AlexRussell","DeanTom"]
59};
60
61
62addMethod(people,"find",find0);
63addMethod(people,"find",find1);
64addMethod(people,"find",find2);
65
66
67consolelog(peoplefind());//输出["DeanEdwards","AlexRussell","DeanTom"]
68consolelog(peoplefind("Dean"));//输出["DeanEdwards","DeanTom"]
69consolelog(peoplefind("Dean","Edwards"));//输出["DeanEdwards"]
以上就是小编今天为大家分享的关于Web前端工程师应该知道的JavaScript的10个难点。希望本篇文章能够对正在从事Web前端学习的小伙伴们有所帮助。想要了解更多web前端相关知识记得关注北大青鸟Web培训官网最后祝愿小伙伴们工作顺利!
原文链接:#/a/1190000010371988
这是一般表单中会用到的 1 长度限制
<script>
function test()
{
if(documentabvaluelength>50)
{
alert(”不能超过50个字符!”);
documentabfocus();
return false;
}
}
</script>
<form name=a onsubmit=”return test()”>
<textarea name=”b” cols=”40″ wrap=”VIRTUAL” rows=”6″></textarea>
<input type=”submit” name=”Submit” value=”check”>
</form>
2 只能是汉字
<input onkeyup=”value=”/oblog/valuereplace(/[^\u4E00-\u9FA5]/g,”)”>
3” 只能是英文
<script language=javascript>
function onlyEng()
{
if(!(eventkeyCode>=65&&eventkeyCode<=90))
eventreturnvalue=false;
}
</script>
<input onkeydown=”onlyEng();”>
4 只能是数字
<script language=javascript>
function onlyNum()
{
if(!((eventkeyCode>=48&&eventkeyCode<=57)||(eventkeyCode>=96&&eventkeyCode<=105)))
//考虑小键盘上的数字键
eventreturnvalue=false;
}
</script>
<input onkeydown=”onlyNum();”>
5 只能是英文字符和数字
<input onkeyup=”value=”/oblog/valuereplace(/[\W]/g,””) “onbeforepaste=”clipboardDatasetData(’text’,clipboardDatagetData(’text’)replace(/[^\d]/g,”))”>
6 验证邮箱格式
<SCRIPT LANGUAGE=javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmailsearch(/^\w+((-\w+)|(\\w+))\@[A-Za-z0-9]+((\|-)[A-Za-z0-9]+)\[A-Za-z0-9]+$/) != -1)
return true;
else
alert(”oh”);
}
</SCRIPT>
<input type=text onblur=isEmail(thisvalue)>
7 屏蔽关键字(这里屏蔽和)
<script language=”javascript12″>
function test() {
if((abvalueindexOf (””) == 0)||(abvalueindexOf (””) == 0)){
alert(”:)”);
abfocus();
return false;}
}
</script>
<form name=a onsubmit=”return test()”>
<input type=text name=b>
<input type=”submit” name=”Submit” value=”check”>
</form>
8 两次输入密码是否相同
<FORM METHOD=POST ACTION=”">
<input type=”password” id=”input1″>
<input type=”password” id=”input2″>
<input type=”button” value=”test” onclick=”check()”>
</FORM>
<script>
function check()
{
with(documentall){
if(input1value!=input2value)
{
alert(”false”)
input1value = “”;
input2value = “”;
}
else documentforms[0]submit();
}
}
</script>
够了吧 :)
屏蔽右键 很酷
oncontextmenu=”return false” ondragstart=”return false” onselectstart=”return false”
加在body中
二
21 表单项不能为空
<script language=”javascript”>
<!–
function CheckForm()
{
if (documentformnamevaluelength == 0) {
alert(”请输入您姓名!”);
documentformnamefocus();
return false;
}
return true;
}
–>
</script>
22 比较两个表单项的值是否相同
<script language=”javascript”>
<!–
function CheckForm()
if (documentformPWDvalue != documentformPWD_Againvalue) {
alert(”您两次输入的密码不一样!请重新输入”);
documentADDUserPWDfocus();
return false;
}
return true;
}
–>
</script>
23 表单项只能为数字和”_”,用于电话/银行帐号验证上,可扩展到域名注册等
<script language=”javascript”>
<!–
function isNumber(String)
{
var Letters = ”1234567890-”; //可以自己增加可输入值
var i;
var c;
if(StringcharAt( 0 )==’-')
return false;
if( StringcharAt( Stringlength - 1 ) == ’-’ )
return false;
for( i = 0; i < Stringlength; i ++ )
{
c = StringcharAt( i );
if (LettersindexOf( c ) < 0)
return false;
}
return true;
}
function CheckForm()
{
if(! isNumber(documentformTELvalue)) {
alert(”您的电话号码不合法!”);
documentformTELfocus();
return false;
}
return true;
}
–>
</script>
24 表单项输入数值/长度限定
<script language=”javascript”>
<!–
function CheckForm()
{
if (documentformcountvalue > 100 || documentformcountvalue < 1)
{
alert(”输入数值不能小于零大于100!”);
documentformcountfocus();
return false;
}
if (documentformMESSAGEvaluelength<10)
{
alert(”输入文字小于10!”);
documentformMESSAGEfocus();
return false;
}
return true;
}
//–>
</script>
25 中文/英文/数字/邮件地址合法性判断
<SCRIPT LANGUAGE=”javascript”>
<!–
function isEnglish(name) //英文值检测
{
if(namelength == 0)
return false;
for(i = 0; i < namelength; i++) {
if(namecharCodeAt(i) > 128)
return false;
}
return true;
}
function isChinese(name) //中文值检测
{
if(namelength == 0)
return false;
for(i = 0; i < namelength; i++) {
if(namecharCodeAt(i) > 128)
return true;
}
return false;
}
function isMail(name) // E-mail值检测
{
if(! isEnglish(name))
return false;
i = nameindexOf(” at ”);
j = name dot lastIndexOf(” at ”);
if(i == -1)
return false;
if(i != j)
return false;
if(i == name dot length)
return false;
return true;
}
function isNumber(name) //数值检测
{
if(namelength == 0)
return false;
for(i = 0; i < namelength; i++) {
if(namecharAt(i) < ”0″ || namecharAt(i) > ”9″)
return false;
}
return true;
}
function CheckForm()
{
if(! isMail(formEmailvalue)) {
alert(”您的电子邮件不合法!”);
formEmailfocus();
return false;
}
if(! isEnglish(formnamevalue)) {
alert(”英文名不合法!”);
formnamefocus();
return false;
}
if(! isChinese(formcnnamevalue)) {
alert(”中文名不合法!”);
formcnnamefocus();
return false;
}
if(! isNumber(formPublicZipCodevalue)) {
alert(”邮政编码不合法!”);
formPublicZipCodefocus();
return false;
}
return true;
}
//–>
</SCRIPT>
26 限定表单项不能输入的字符
<script language=”javascript”>
<!–
function contain(str,charset)// 字符串包含测试函数
{
var i;
for(i=0;i<charsetlength;i++)
if(strindexOf(charsetcharAt(i))>=0)
return true;
return false;
}
function CheckForm()
{
if ((contain(documentformNAMEvalue, ”%\(\)><”)) || (contain(documentformMESSAGEvalue, ”%\(\)><”)))
{
alert(”输入了非法字符”);
documentformNAMEfocus();
return false;
}
return true;
}
//–>
</script>
1 检查一段字符串是否全由数字组成
—————————————
<script language=”Javascript”><!–
function checkNum(str){return strmatch(/\D/)==null}
alert(checkNum(”1232142141″))
alert(checkNum(”123214214a1″))
// –></script>
2 怎么判断是否是字符
—————————————
if (/[^\x00-\xff]/gtest(s)) alert(”含有汉字”);
else alert(”全是字符”);
3 怎么判断是否含有汉字
—————————————
if (escape(str)indexOf(”%u”)!=-1) alert(”含有汉字”);
else alert(”全是字符”);
4 邮箱格式验证
—————————————
//函数名:chkemail
//功能介绍:检查是否为Email Address
//参数说明:要检查的字符串
//返回值:0:不是 1:是
function chkemail(a)
{ var i=alength;
var temp = aindexOf(’@');
var tempd = aindexOf(’');
if (temp > 1) {
if ((i-temp) > 3){
if ((i-tempd)>0){
return 1;
}
}
}
return 0;
}
5 数字格式验证
—————————————
//函数名:fucCheckNUM
//功能介绍:检查是否为数字
//参数说明:要检查的数字
//返回值:1为是数字,0为不是数字
function fucCheckNUM(NUM)
{
var i,j,strTemp;
strTemp=”0123456789″;
if ( NUMlength== 0)
return 0
for (i=0;i<NUMlength;i++)
{
j=strTempindexOf(NUMcharAt(i));
if (j==-1)
{
//说明有字符不是数字
return 0;
}
}
//说明是数字
return 1;
}
6 电话号码格式验证
—————————————
//函数名:fucCheckTEL
//功能介绍:检查是否为电话号码
//参数说明:要检查的字符串
//返回值:1为是合法,0为不合法
function fucCheckTEL(TEL)
{
var i,j,strTemp;
strTemp=”0123456789-()# “;
for (i=0;i<TELlength;i++)
{
j=strTempindexOf(TELcharAt(i));
if (j==-1)
{
//说明有字符不合法
return 0;
}
}
//说明合法
return 1;
}
7 判断输入是否为中文的函数
—————————————
function ischinese(s){
var ret=true;
for(var i=0;i<slength;i++)
ret=ret && (scharCodeAt(i)>=10000);
return ret;
}
8 综合的判断用户输入的合法性的函数
—————————————
<script language=”javascript”>
//限制输入字符的位数开始
//m是用户输入,n是要限制的位数
function issmall(m,n)
{
if ((m<n) && (m>0))
{
return(false);
}
else
{return(true);}
}
9 判断密码是否输入一致
—————————————
function issame(str1,str2)
{
if (str1==str2)
{return(true);}
else
{return(false);}
}
10 判断用户名是否为数字字母下滑线
—————————————
function notchinese(str){
var reg=/[^A-Za-z0-9_]/g
if (regtest(str)){
return (false);
}else{
return(true); }
}
28 form文本域的通用校验函数
—————————————
作用:检测所有必须非空的input文本,比如姓名,账号,邮件地址等等。
该校验现在只针对文本域,如果要针对form里面的其他域对象,可以改变判断条件。
使用方法:在要检测的文本域中加入title文字。文字是在提示信息,你要提示给用户的该字段的中文名。比如要检测用户名
html如下<input name=”txt_1″ title=”姓名”>,当然,最好用可视化工具比如dreamweaver什么的来编辑域。
如果要检测数字类型数据的话,再把域的id统一为sz
javascript判断日期类型比较麻烦,所以就没有做日期类型校验的程序了高手可以补充。
程序比较草,只是提供一个思路。抛砖引玉! :)
哦,对了,函数调用方法:
< form onsubmit=”return dovalidate()”>
function dovalidate()
{
fm=documentforms[0] //只检测一个form,如果是多个可以改变判断条件
for(i=0;i<fmlength;i++)
{
//检测判断条件,根据类型不同可以修改
if(fm[i]tagNametoUpperCase()==”INPUT” &&fm[i]typetoUpperCase()==”TEXT” && (fm[i]title!=”"))
if(fm[i]value=”/blog/=”")//
{
str_warn1=fm[i]title+”不能为空!”;
alert(str_warn1);
fm[i]focus();
return false;
}
if(fm[i]idtoUpperCase()==”SZ”)//数字校验
{
if(isNaN(fm[i]value))
{ str_warn2=fm[i]title+”格式不对”;
alert(str_warn2);
fm[i]focus();
return false;
}
}
}
return true;
}
今天小编要跟大家分享的文章是关于Web前端新手应该知道的JavaScript开发技巧有哪些熟悉Web前端的小伙伴都知道,Javascript
的很多扩展的特性是的它变得更加的犀利,同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站。
尽管很多的开发人员都乐于颂扬javascript,但是仍旧有人看到它的阴暗面。
使用很多javascript代码的Web页面会加载很慢,过多的使用javascript使得网页丑陋和拖沓。很快如何有效地使用
javascript成为一个非常火热的话题。
今天小编就为Web前端新手准备了这篇JavaScript开发技巧,希望能够对你有所帮助,下面我们一起来看一看吧!
1、尽可能的保持代码简洁
可能大家都听到过了N遍这个代码简洁问题了。作为一个开发人员你可能在你的代码开发过程中使用了很多次,但千万不要在js开发中忘记这点。
§尽量在开发模式中添加注释和空格,这样保持代码的可读性
§在发布到产品环境前请将空格和注释都删除,并且尽量缩写变量和方法名
§使用第三方工具帮助你实现压缩javascript。
2、思考后再修改prototypes
添加新的属性到对象prototype中是导致脚本出错的常见原因。
yourObjectprototypeanotherFunction='Hello';
yourObjectprototypeanotherMethod=function(){}
在上面代码中,所有的变量都会被影响,因为他们都继承于yourObject。这样的使用会导致意想不到的行为。所以建议在使用完后删除类似的修改。
yourObjectprototypeanotherFunction='Hello';
yourObjectprototypeanotherMethod=function(){};
testanotherMethod();
deleteyourObjectprototypeanotherFunction='Hello';
deleteyourObjectprototypeanotherMethod=function(){};
3、DebugJavascript代码
即使最好的开发人员都会犯错。为了最大化的减少类似错误,请在你的debugger中运行你的代码,确认你没有遇到任何细微的错误。
4、避免Eval
你的JS在没有eval方法的时候也可以很好的工作。eval允许访问javascript编译器。如果一个字符串作为参数传递到
eval,那么它的结果可以被执行。
这会很大的降低代码的性能。尽量避免在产品环境中使用eval。
5、最小化DOM访问
DOM是最复杂的API,会使得代码执行过程变慢。有时候Web页面可能没有加载或者加载不完整。最好避免DOM。
6、在使用javascript类库之前先学习javascript
互联网充斥着很多的javascript类库,很多程序员都往往使用js类库而不理解负面影响。强烈建议你在使用第三方类库之前学习基本的JS
代码,否则,你就准备着倒霉吧。
7、不要用“SetTimeOut”和“Setinterval”方法来作为“Eval”的备选
setTimeOut("documentgetID('value')",3000);
在以上代码中documentgetID(‘value’)在setTimeOut方法中被作为字符串来处理。这类似于eval
方法,在每个代码执行中来执行一个字符串,因此会降低性能,因此,建议在这些方法中传递一个方法。
setTimeOut(yourFunction,3000);
8、[]比newArray();更好
一个常犯的错误在于使用当需要数组的时候使用一个对象或者该使用对象的时候使用一个数组。但是使用原则很简单:
“当属性名称是小的连续整数,你应该使用数组。否则,使用一个对象”_DouglasCrockford,JavaScript:Good
Parts的作者
建议:
vara=['1A','2B'];
避免:
vara=newArray();
a[0]="1A";
a[1]="2B";
9、尽量不要多次使用var
在初始每一个变量的时候,程序员都习惯使用var关键字。相反,建议你使用逗号来避免多余的关键字,并且减少代码体积。如下:
varvariableOne='string1',
variableTwo='string2',
variableThree='string3';
10、不要忽略分号“;”
这往往是大家花费数个小时进行debug的原因之一。
我很确信你肯定也在其它的文章中阅读过以上相关的内容,但是大家可能往往都忽略了很多基本的规则。你是不是也曾经忽略过分号。是不是也遇到过eval
关键字问题导致性能问题
以上就是小编今天为大家分享的关于Web前端新手应该知道的JavaScript
开发技巧有哪些的文章,希望本篇文章能够对刚刚接触Web前端行业的新手们有所帮助。想要了解更多Web前端知识记得关注北大青鸟Web前端培训官网!
声明:内容与均来源于网络(部分内容有修改),版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
以上就是关于为什么Web前端要学习JavaScript全部的内容,包括:为什么Web前端要学习JavaScript、如何写高质量的JS,Html5前端代码、帮助Web前端初学者快速掌握JavaScript技术的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)