今天我们来聊聊[javascript网页开发],以下4个是关于javascript网页开发的观点,希望能帮助到您找到想要的,更多JavaScript前端开发相关的资讯继续关注本站。
让Web前端代码更高效的JavaScript技巧有哪些?
本文贡献者:【青竹暖回阳】, 疑问关键字:javascript网页开发, 下面就让重庆云诚科技小编为你解答,希望本文能找到您要的答案!
答今天小编要跟大家分享的文章是关于让Web前端代码更高效的JavaScript技巧有哪些正在从事Web前端工作的小伙伴们都知道,JavaScript是前端开发人员必学的一门语言。今天,编为大家准备了一些让Web前端代码更高效的JavaScript技巧,下面我们一起来看一看吧!
01、async/await
如果你还陷入到回调地狱中,那么你应该回到2014年去开发你的代码。除非绝对必要(像第三方库需要或者性能原因),否则不要使用回调。Promise是非常好的解决回调地狱,但是当你的代码变得越来越大时,它也会变得不太好用。我现在的解决方案就是async
/await,它极大提高了代码可读性以及简洁性。
在所有使用Promise的地方你都可以替换成await,在你需要返回Promise对象,简单await它并返回,为了使它不报错,你需要在定义函数的开头添加async。事实上,async
/await就是Promise的语法糖。下面就是一个简单的例子:
(asyncfunctiongetData(){
constresult=awaitaxios.get('#/service/ping')
constdata=result.data
console.log('data',data)
returndata
}
getData()
await操作符用于等待一个Promise对象。它只能在异步函数asyncfunction中使用。async/
await是属于ES2017的内容,所以可能需要babel编译你的代码。不过现在的主流浏览器都已经支持了。
02、异步控制流
经常地,我们会遇到这样的需求,请求获取多个数据集并对每个数据集进行各自处理或者需要等所有异步回调完成后返回一个值。遇到这些情况,我是这么处理的:
forof
假设我们的页面有多个Pokemon(口袋妖怪),需要获取到它们的详细的信息。我们不想等所有调用结束,特别是不知道它有多少次调用,我们仅想在它有调用返回时就更新我们的数据集。可以用forof来遍历数组,在代码块里执行async,这样的话,只有每次await执行成功,代码才会继续往下执行。
这里要着重说明,这样做可能会导致性能瓶颈(当请求很多的时候),但像这样做才能到达预期的效果。请看下面的例子:
importaxiosfrom'axios'
letmyData=[{id:0},{id:1},{id:2},{id:3}]
asyncfunctionfetchData(dataSet){
for(entryofdataSet){
constresult=awaitaxios.get(`#/pokemon/${entry.id}`)
constnewData=result.data
updateData(newData)
console.log(myData)
}
}
functionupdateData(newData){
myData=myData.map(el=>{
if(el.id===newData.id)returnnewData
returnel
})
}
fetchData(myData)
这个代码是能正常运行,你可以轻松地复制它到codesandbox运行。
Promise.all
如果你想同时获取所有口袋妖怪的详情呢你需要等待所有的请求的完成返回,这时简单使用
Promise.all:
importaxiosfrom'axios'
letmyData=[{id:0},{id:1},{id:2},{id:3}]
asyncfunctionfetchData(dataSet){
constpokemonPromises=dataSet.map(entry=>{
returnaxios.get(`#/pokemon/${entry.id}`)
})
constresults=awaitPromise.all(pokemonPromises)
results.forEach(result=>{
updateData(result.data)
})
console.log(myData)
}
functionupdateData(newData){
myData=myData.map(el=>{
if(el.id===newData.id)returnnewData
returnel
})
}
fetchData(myData)
for.of和Promise.all都是ES6以后提出来的,请确保你的环境能运行。
03、解构(Destructuring)&默认值
我们接着上面的那个例子,提取一部分代码:
constresult=axios.get(`#/pokemon/${entry.id}`)
constdata=result.data
有一种简单的方法,解构从数组,或对象中获取一些属性(值)。像这样:
const{data}=awaitaxios.get(.)
注意当解构的时候,通常要赋给它一个默认值。这样确保你不会得到undefined以及你不用自己手动地检查变量。
const{id=5}={}
console.log(id)//5
这个技巧也被运用到了函数参数中。例如:
functioncalculate({operands=[1,2],type='addition'}={}){
returnoperands.reduce((acc,val)=>{
switch(type){
case'addition':
returnacc+val
case'subtraction':
returnacc-val
case'multiplication':
returnacc*val
case'division':
returnacc/val
}
},['addition','subtraction'].includes(type)0:1)
}
console.log(calculate())//3
console.log(calculate({type:'division'}))//0.5
console.log(calculate({operands:[2,3,4],type:'multiplication'}))//24
这个例子起初看起来可能有点混乱,但是慢慢观察。当我们没有给函数传递参数的时候,就会使用默认值。一旦我们开始传递参数,仅会使用那些没有传递的参数的默认值。这样,减少了你对异常状态的处理。
04、真值&假值
当使用默认值,就可以不用对现有值进行一些额外的检查。但是了解你的变量是真值还是假值是非常棒的。它能提高你的代码扩展性,更具有说服力的以及简洁。我常看到下面一些写法:
if(myBool===true){
console.log(.)
}
//OR
if(myString.length>0){
console.log(.)
}
//OR
if(isNaN(myNumber)){
console.log(.)
}
为了用这些简洁的判断,你要充分理解js中真值,假值具体有哪些这里概述一下:
假值:
1.字符串,但长度为0
2.数字0
3.false
4.undefined
5.null
6.NaN
真值
1.空数组
2.空对象
3.其他有值的数据.
注意:在判断真/假值,还应该注意到你使用的是等于'==',还是全等'===',这经常会导致bug。对我而言,经常是数字0。
05、逻辑运算与三元运算符
逻辑运算
逻辑运算是基于多个表达式真假的判断,注意到js是惰性求值的策略。逻辑运算一般返回一个布尔值。&&和||
运算符会返回一个指定操作数的值。来看这里:
console.log(true&&true)//true
console.log(false&&true)//false
console.log(true&&false)//false
console.log(false&&false)//false
console.log(true||true)//true
console.log(true||false)//true
console.log(false||true)//true
console.log(false||false)//false
进行的逻辑运算,是按照下面的规则进行的:
&&:第一个值为假值,则直接返回;如果为真值,则直接返回第二的值
||:第一个值为真,则直接返回;如果为假,则直接返回第二的值。
console.log(0&&{a:1})//0
console.log(false&&'a')//false
console.log('2'&&5)//5
console.log([]||false)//[]
console.log(NaN||null)//null
console.log(true||'a')//true
三元运算符
三元运算符和逻辑运算是相似的,但是它有3个部分:
conditionexpr1:expr2
condition为进行条件判断的部分,将会得到真值或者假值
expr1为条件判断为真时返回的值
expr2为条件判断为假时返回的值
例如:
const
console.log(lang==='German''Hallo':'Hello')//Hallo
console.log(lang'Ja':'Yes')//Ja
console.log(lang==='French''Bonsoir':'Goodevening')//Goodevening
06、OptionalChaining
过去在Object属性链的调用中,很容易因为某个属性不存在而导致之后出现Cannotreadpropertyxxxof
undefined的错误。为了确认需要向这样处理:
letdata
if(myObj&&myObj.firstProp&&myObj.firstProp.secondProp&&myObj.firstProp.secondProp.actualData)data=myObj.firstProp.secondProp.actualData
这样事冗余的,有一个新的提案的方法就是OptionalChaining,如下的形式:
constdata=myObj.firstProp.secondProp.actualData
我认为它是检查嵌套属性最佳方法,代码是如此的简洁。
这个特性可以说是非常实用了,不过它现在处于stage-1阶段。你可以在.babelrc文件中引入
@babel/plugin-proposal-optional-chaining插件来使用它。
07、Classproperties&binding
在JavaScript中函数绑定也是经常的工作任务。现在,大家应该都是用箭头函数自动绑定this到这个类上的(这里可能有歧义,首先箭头函数里面是没有this
和arguments的,这里的this把它当成一个参数就行)。
如果不用箭头函数,我们就需要在构造函数绑定this,当类的方法很多的时候,这就显得很冗余。因此,建议和提倡在类里面用箭头函数。如:
classCounterextendsReact.Component{
constructor(props){
super(props)
this.state={count:0}
}
render(){
return(
{this.state.count}
IncreaseCount
上文就是重庆云诚科技小编解答贡献者:(青竹暖回阳)分析的关于“让Web前端代码更高效的JavaScript技巧有哪些?”的问题了,不知是否已经解决你的问题?如果没有,下一篇内容可能是你想要的答案,接下来继续详述下文用户【烟雨江南却痴缠】回答的“Web前端工程师要掌握的JavaScript代码的编写技巧”的一些相关疑问做出分析与解答,如果能找到你的答案,可以关注本站。

Web前端工程师要掌握的JavaScript代码的编写技巧
本文贡献者:【烟雨江南却痴缠】, 疑问关键字:javascript网页开发, 下面就让重庆云诚科技小编为你解答,希望本文能找到您要的答案!
答今天小编要跟大家分享的文章是关于Web前端工程师要掌握JavaScript
代码的编写技巧。正在从事Web前端开发工作的小伙伴们来和小编一起看一看本篇文章吧,希望能够对大家有所帮助!
1、Array.includes与条件判断
一般我们判断或用||
//condition
functiontest(fruit){
if(fruit=="apple"||fruit=="strawberry"){
console.log("red");
}
}
如果我们有更多水果
functiontest(fruit){
constredFruits=["apple","strawberry","cherry","cranberries"];
if(redFruits.includes(fruit)){
console.log("red");
}
}
2、Set与去重
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set
数据结构。
数组去重
constarr=[3,5,2,2,5,5];
constunique=[.newSet(arr)];
//[3,5,2]
Array.from方法可以将Set结构转为数组。我们可以专门编写使用一个去重的函数
functionunique(array){
returnArray.from(newSet(array));
}
unique([1,1,2,3]);//[1,2,3]
字符去重
letstr=[.newSet("ababbc")].join("");
console.log(str);
//'abc'
另外Set是如此强大,因此使用Set可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)。
leta=newSet([1,2,3]);
letb=newSet([4,3,2]);
//并集
letunion=newSet([.a,.b]);
//Set{1,2,3,4}
//交集
letintersect=newSet([.a].filter(x=>b.has(x)));
//set{2,3}
//差集
letdifference=newSet([.a].filter(x=>!b.has(x)));
//Set{1}
3、Map与字典类型数据
一般而已,JavaScript实现字典数据是基于Object对象。但是JavaScript
的对象的键只能是字符串。对于编程来说有很多不便。ES6提供了Map数据结构。它类似于Object
对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值,字符串、数值、布尔值、数组、对象等等都可以当作键。
constresultMap=newMap()
.set(-1,{text:'小于',color:'yellow')
.set(0,{text:'等于',color:'black')
.set(1,{text:'大于',color:'green')
.set(null,{text:'没有物品',color:'red'})
letstate=resultMap.get(null)
//{text:'没有物品',color:'red'}
Map的遍历顺序就是插入顺序
constmap=newMap([["F","no"],["T","yes"]]);
for(letkeyofmap.keys){
console.log(key);
}
//"F"
//"T"
for(letvalueofmap.value()){
console.log(value);
}
//"no"
//"yes"
4、函数式的方式处理数据
按照我的理解,函数式编程主张函数必须接受至少一个参数并返回一个值。所以所有的关于数据的操作,都可以用函数式的方式处理。
假设我们有这样的需求,需要先把数组foo中的对象结构更改,然后从中挑选出一些符合条件的对象,并且把这些对象放进新数组result里。
letfoo=[
{
name:"Stark",
age:21
},
{
name:"Jarvis",
age:20
},
{
name:"Pepper",
age:16
}
];
//我们希望得到结构稍微不同,age大于16的对象:
letresult=[
{
person:{
name:"Stark",
age:21
},
friends:[]
},
{
person:{
name:"Jarvis",
age:20
},
friends:[]
}
];
从直觉上我们很容易写出这样的代码:
letresult=[];
//有时甚至是普通的for循环
foo.forEach(function(person){
if(person.age>16){
letnewItem={
person:person,
friends:[];
};
result.push(newItem);
}
})
使用函数式的写法,可以优雅得多
letresult=foo
.filter(person=>person.age>16)
.map(person=>({
person:person,
friends:[]
}));
数组求和
letfoo=[1,2,3,4,5];
//不优雅
functionsum(arr){
letx=0;
for(leti=0;i
x+=arr[i];
}
returnx;
}
sum(foo);//=>15
//优雅
foo.reduce((a,b)=>a+b);//=>15
5、compose与函数组合
以下代码称为组合compose
constcompose=function(f,g){
returnfunction(x){
returnf(g(x));
};
};
由于函数式编程大行其道,所以现在将会在JavaScript代码看到大量的箭头()=>()=>()=>的代码。
ES6版本compose
constcompose=(f,g)=>x=>f(g(x));
在compose的定义中,g将先于f执行,因此就创建了一个从右到左的数据流。这样做的可读性远远高于嵌套一大堆的函数调用.
我们选择一些函数,让它们结合,生成一个崭新的函数。
reverse反转列表,head取列表中的第一个元素;
consthead=arr=>arr[0];
constreverse=arr=>[].concat(arr).reverse();
constlast=compose(head,reverse);
last(["jumpkick","roundhouse","uppercut"]);
//"uppercut"
但是我们这个这个compose不够完善,只能处理两个函数参数。redux源码有个很完备的compose函数,我们借鉴一下。
functioncompose(.funcs){
if(funcs.length===0){
returnarg=>arg
}
if(funcs.length===1){
returnfuncs[0]
}
returnfuncs.reduce((a,b)=>(.args)=>a(b(.args)))
}
有了这个函数,我们可以随意组合无数个函数。现在我们增加需求,组合出一个lastAndUpper函数,内容是先reverse反转列表,head
取列表中的第一个元素,最后toUpperCase大写。
consthead=arr=>arr[0];
constreverse=arr=>[].concat(arr).reverse();
consttoUpperCase=str=>str.toUpperCase();
constlast=compose(head,reverse);
constlastAndUpper=compose(toUpperCase,head,reverse,);
console.log(last(["jumpkick","roundhouse","uppercut"]));
//"uppercut"
console.log(lastAndUpper(["jumpkick","roundhouse","uppercut"]))
//"UPPERCUT"
就是小编今天为大家分享的关于Web前端工程师要掌握的JavaScript
代码的编写技巧的文章,希望本篇文章能够对正在从事Web前端工作的小伙伴们有所帮助。想要了解更多Web前端相关知识记得关注北大青鸟Web培训官网。最后祝愿小伙伴们工作顺利!
作者:廖振廷
作者:#/p/54758068
上文就是重庆云诚科技小编解疑贡献者:(烟雨江南却痴缠)贡献的关于“Web前端工程师要掌握的JavaScript代码的编写技巧”的问题了,不知是否已经解决你的问题?如果没有,下一篇内容可能是你想要的答案,下面继续解答下文用户【剃度,是为了遗忘】解答的“为什么学习Web前端一定要掌握JavaScript?”的一些相关疑点做出分析与解答,如果能找到你的答案,可以关注本站。
为什么学习Web前端一定要掌握JavaScript?
本文贡献者:【剃度,是为了遗忘】, 疑问关键字:javascript网页开发, 下面就让重庆云诚科技小编为你解答,希望本文能找到您要的答案!
答今天小编要跟大家分享的文章是关于为什么学习web前端一定要掌握JavaScript在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。
而后端代码是用什么编写的则无所谓——不管是Java,PHP,.NET,Node.js还是其他——但是客户端就一定需要一个JavaScript开发人员。事实上,现在很多开发人员依然没有认识到JavaScript有多么强大。
web前端开发,掌握JavaScript这门编程语言的必要,JS有哪些功能和领域呢下面我们一起来看一看吧!
1.数据可视化
数据可视化是当下大家所推崇的一种互动展示模式,而Java拥有ECharts、Dygraphs.js、D3.js、InfoVis、Springy.js等多种可实现数据可视化效果的框架。
2.移动应用
PhoneGap将WebView带向了移动应用,同时也将JavaScript带向了移动应用。
3.服务端
因为V8的性能将JavaScript带到了一个新的高度,于是Node.js诞生了——前端、后台都可以用JavaScript,现在任何一个网页都离不开JavaScript。
4.全平台应用
一份代码构建移动、桌面、Web能够全平台应用,在Eletcron上运行Ionic,就意味着无限的可能性。
5.游戏
如果你对网页游戏仅仅停留在Flash的时代,认为只有Flash才能做出非常绚丽的游戏特效,那就错了。JavaScript也可以做出华丽的特效!
6.VR
利用3D游戏引擎,如Three.js,你也可以来创建一个3D世界。
7.硬件
Tessel可以直接在设备上运行JavaScript,连服务器都不需要,然后像做网络开发一样通过用IDE和库去开发它,上传新的固件只需一句tessel
推送指令。
8.操作系统
那么是否有可能仅使用Node.js创建一个操作系统呢NodeOS了解一下,虽然它是用Linux
内核来处理各种底层任务,比如硬件通讯什么的,但是除此之外,使用的都是Node.js。
JavaScript在整个WEB中的地位:它属于前端的核心,主要用来操控和重新调整DOM,通过修改DOM结构,从而来达到修改页面效果的目的。
就是小编今天为大家分享的关于为什么学习web前端一定要掌握JavaScript的文章,希望本篇文章能够对正在从事web前端学习的小伙伴们有所帮助,想要了解更多web前端知识记得关注北大青鸟web前端培训官网。最后祝愿小伙伴们学习成功,工作顺利!
以上就是重庆云诚科技小编解答(剃度,是为了遗忘)贡献关于“为什么学习Web前端一定要掌握JavaScript?”的答案,接下来继续为你详解体育用户(隔岸▽观火)回答“Web前端新手应该知道的JavaScript开发技巧有哪些?”的一些相关解答,希望能解决你的问题!
Web前端新手应该知道的JavaScript开发技巧有哪些?
本文贡献者:【隔岸▽观火】, 疑问关键字:javascript网页开发, 下面就让重庆云诚科技小编为你解答,希望本文能找到您要的答案!
答今天小编要跟大家分享的文章是关于Web前端新手应该知道的JavaScript开发技巧有哪些熟悉Web前端的小伙伴都知道,Javascript
的很多扩展的特性是的它变得更加的犀利,同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站。
尽管很多的开发人员都乐于颂扬javascript,但是仍旧有人看到它的阴暗面。
使用很多javascript代码的Web页面会加载很慢,过多的使用javascript使得网页丑陋和拖沓。很快如何有效地使用
javascript成为一个非常火热的话题。
今天小编就为Web前端新手准备了这篇JavaScript开发技巧,希望能够对你有所帮助,下面我们一起来看一看吧!
1、尽可能的保持代码简洁
可能大家都听到过了N遍这个代码简洁问题了。作为一个开发人员你可能在你的代码开发过程中使用了很多次,但千万不要在js开发中忘记这点。
§尽量在开发模式中添加注释和空格,这样保持代码的可读性
§在发布到产品环境前请将空格和注释都删除,并且尽量缩写变量和方法名
§使用第三方工具帮助你实现压缩javascript。
2、思考后再修改prototypes
添加新的属性到对象prototype中是导致脚本出错的常见原因。
yourObject.prototype.anotherFunction='Hello';
yourObject.prototype.anotherMethod=function(){.}
在上面代码中,所有的变量都会被影响,因为他们都继承于yourObject。这样的使用会导致意想不到的行为。所以建议在使用完后删除类似的修改。
yourObject.prototype.anotherFunction='Hello';
yourObject.prototype.anotherMethod=function(){};
test.anotherMethod();
deleteyourObject.prototype.anotherFunction='Hello';
deleteyourObject.prototype.anotherMethod=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("document.getID('value')",3000);
在代码中document.getID(‘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前端培训官网!
*声明:内容与图片均来源于网络(部分内容有修改),版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
今天的内容先分享到这里了,读完本文《「javascript网页开发」JavaScript前端开发》之后,是否是您想找的答案呢?想要了解更多,敬请关注www.cqycseo.com,您的关注是给小编最大的鼓励。
推荐文章:
本文由网上采集发布,不代表我们立场,转载联系作者并注明出处:https://www.cqycseo.com/kangadmin/makehtml_archives_action.php?endid=0&startid=-1&typeid=15&totalnum=6115&startdd=1240&pagesize=20&seltime=0&sstime=1679321406&stime=&etime=&uptype=&mkvalue=0&isremote=0&serviterm=
