这篇博文内容比较简单,但是在目前的项目开发中,还是发现这些细节被同学们忽略了。写这篇文章的权利应该作为对学生的介绍。然后加上鼓励,做的更好的同学,欢迎在文末发表评论,供大家参考。js设置默认值在ES6之前,没有设置默认值的语法。您通常使用以下方法设置默认值:functionfn(num){//设置默认值num=num||1;console.log(num);}但问题是,当fn函数的参数num为0、false、null、undefined或空字符串时,num会被赋默认值1。显然:当参数作为0传递,它没有像我们希望的那样设置为默认值。1、这时候最好赋默认值functionfn(num){num=typeofnum==='undefined'?1:数量;console.log(num);}默认值,顾名思义,不给函数传的参数就是参数的默认值,翻译成js代码,即只有当参数未定义。所以,用undefined作为判断的目标还是比较科学的,因为其他几种数据类型,虽然从字面值上来说,确实可以在某个时刻等于undefined(==),但是从数据上来说,其实是有实质内容的,也可以说是占用了实际的内存空间,不能完全等同于undefined(===)。多条件并行一般在业务比较复杂的地方,经常会出现多条件并行的if语句。很多同学并行使用多个条件表达式来显示一行。执行上当然没有问题,但是很不方便。阅读,编辑器没有设置代码自动换行,需要拖一个长长的水平滚动条。看了下面的条件,前面的都快忘记了;不符合每行不超过80个字符的编码风格,如果配置了eslint等,也会提示警告。其实多个条件可以多行并排显示,如下:...if(a===1&&b===1&&c===1||....){//dosomething}...看起来很清楚,每个条件和上下文之间的关系也很容易阅读和记忆。同样,在使用web组件开发时,往往需要向组件传递一堆数据,如:<组件data1={data1}data2={data1}data3={data3}data4={data4}data5={数据5}。../>一行代码写入大量数据,同样会造成上述阅读和记忆不便的问题。稍微修改一下,分行写,会清晰很多,比如:模板语言缩进问题现在很多项目都是使用mvvm框架开发的,像AngularJS、RegularJS、VueJS都有自己的模板系统,也有自己的一套语法规则。一般来说,模板语言会有处理条件分支的if-else语句,以及遍历数据的each语句。开发过程中,有的同学为了体现html的结构,写if-else,每条语句底层代码不缩进,如(模板语法参考RegularJS):
{#eachlistasitem}{item}{/each}
有同学可能为了体现div和span的父子关系,没有在
标签位于。上面的代码每条语句只有一层。貌似可以接受,但是如果加上条件判断,比如:{#eachlistasitem}{#ifitem<10}Numberslessthan10:{item}{#else}10以内的数:{item}{/if}{/each}
乍一看each和if-else混在一起,可读性特别差。以我的理解,在组件模板中,不知道是不是只能关注html的结构,因为除了html,逻辑处理也是我们程序的目的。如果只关注程序的html结构,代码可读性会很差,整体代码交互性差。如果不清楚,无疑会增加代码维护的成本。尤其是有强迫症的程序员,眼里容不下多余的空间,哪怕是在行尾,也要淘汰掉。我推荐的模板代码格式,逻辑块(each、if、else等)如:{#eachlistasitem}{#ifitem<10}小于10的数字:{item}{#else}10以内的数:{item}/span>{/if}{/each}
可以考虑使用一些数据结构初学编程的时候,老师说:程序设计=数据结构+算法,但是后来在业务开发中,很少会直接使用数据结构和算法,这些东西已经被编程语言封装了,但是少用不代表不用,尤其是现在云计算、大数据、人工智能等技术,必然离不开算法,这有点遥远。其实在日常的业务开发中,如果能够留心,还是可以发现一些数据结构的应用场景的。比如对二叉树进行排序,求临界值(最大值和最小值),如果有这个需求也可以考虑;还有就是队列,在开发购票业务有排队场景的时候也可以用到。还有其他的数据结构,比如堆、栈,也有它们的应用场景。之前开发某个业务系统,有一个前端需求,需要对一个列表(数组)进行拖拽排序,比如:将A拖拽到B的位置,流程是:第一步将A从list另外,第二步将A插入到B的位置,上面的过程看似简单。如果纯粹用JS数组来处理,这里需要把数组元素A去掉,把A后面的元素向前移动;第二步是把A插入到B的位置,可以分为两步,首先B包括下面的元素,向后移动,然后把A放到B的位置。使用程序比较复杂处理。如果将链表构造为链表,在移除和插入的位置,只需要修改目标位置的前后指针和目标元素的前后指针即可,操作次数会减少很多。当然,当数据比较少的时候,JS数组的API是可以轻松处理的。用数据结构来解决问题有点像打蚊子的大炮,但我觉得还是很有必要的。数据是动态的东西,现在少了以后不一定会少,比如上面的需求,后面的列表元素就涨到几百个。偏载的问题可能是交互设计的问题,但也可能是前端的问题。localloading这个名字是我自己起的,对应的是globalloading。现在的单页应用时代,数据是前后端分离的,所有的数据都是通过ajax请求获取的。对于交互同意,很多系统设计的时候,在加载过程中会在全局遮罩层上弹出一个加载图标,请求时页面上的所有操作都会被屏蔽。这就是我所说的全局加载。反之,本地加载只需要针对该操作点发送的请求,在相应的操作点上显示加载即可。例如:点击按钮A发送更新列表的请求,只需要在按钮A文案上显示loading或者loading即可。按照我的观点,我反对所有地方都使用全局加载,因为这违背了异步请求的初衷。异步请求本来就是把请求进程放在后台,不影响前台的运行。当获得响应数据时,更新数据。到前台,全局加载阻塞了整个前台界面,无法进行任何操作,比如滚动页面加载数据。此时页面被全局加载阻塞阻塞,无法完整查看页面内容,所有操作都受到限制,如果请求时间过长,体验很差。XXS攻击网上关于XXS攻击的内容很多,也是日常web开发中经常需要注意的安全问题,现在很多前端框架也有一定的防范措施。我想说的也是XXS相关的一个容易被忽略的点:从页面URL获取参数,将参数的内容输出到页面。比如URL中有一个参数,在前端代码中,直接用js获取参数后直接或间接输出到页面,不做XSS相关的编码处理。此时a参数中包含了JS脚本的代码,会造成脚本注入的安全风险。在开发过程中,如果出现这种情况,还是要三思而后行。