前言

js这种语言没有太多封装好的模式或者统一的编程方式,所以一些细节的问题很容易导致bug,那下面就写为:一份坚固的代码是什么样的。

持续更新一下,记一些good case和bug。

事件绑定的选择器不要写元素名(bug)

有这样一个结构

<section>
<ul>
<li>xxx</li>
<li>xxx</li>
<li>xxx</li>
</ul>
</section>

每个区块是一个section,我在每个li上面绑定一个click事件,看起来是没问题的,$(section li).click(xxx),

但是某一天,另一位维护此代码的同学在li里面又写了一段ul,li的结构,并绑定了另一段click事件,这样事件绑定就gg了。

人家怎么知道你会在li上面绑定click事件呢?

good case

就是给每个要绑定事件的元素class。

空数组赋值和取值(bug)

我需要给一个数组的第一项赋值,然而我觉得arr[0]=xxx这样写太丑陋了,也存在下面的问题。于是我写为

[xxx],好像是没什么问题。

但是有一天,后台服务挂了,于是我的xxx成了undefined,于是我的arr成了[undefined],后面的逻辑处理arr的时候就取不到值,后面的判断是

if(arr.length<0){
return false
}

[undefined]竟然通过了这种判断,这就造成了后面取值出错的问题。

good case

没什么好方案只能多加判断,这里的情况是xxx是数组我们需要[xxx[0]],利用[].slice(0,1)还是空,避免undefined。

给class加特定命名(good case)

尝试给css加特定的命名吧,比如模块我用.m-xxx,元件我用.u-xxx,规则就是.模块/布局-元件-状态。为每个样式分组,每个组是一个模块,最小模块是每个元件,元件的不同样式用状态,比如bootstrap的不同颜色,用了.danger,.info,.sucess等。

这样避免class的重复,样式的覆盖,重要的一点就是一眼能看清楚这个class的作用和这个div的作用。

比如网易nec的规范: http://nec.netease.com/standard/css-sort.html

危险动作-取值 (bug)

尝试$('#xxx')的取值动作,一定要判空处理。。!!!!!!

认真的。。

重要代码!最好包try catch,防止后续代码挂掉。当然这不是解决方案。

js在工作中遇到的一些问题的更多相关文章

  1. js实际工作中的技能点

    1.基础知识 a.原型,原型链 b.作用域,闭包 c.异步,单线程 2.JS API a.DOM操作 b.Ajax c.事件绑定 3.开发环境 a.版本管理(git) b.模块化(require.js ...

  2. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  3. 原生js(form)验证,可以借鉴下思路,应用到工作中

    我在工作中时常使用form验证,在目前的公司做的表单验证用的angular的form组件,对于一个有追求的前端,或者应用在移动端写个form验证,引入angular或者jquery组件等验证,难免显得 ...

  4. JS单例模式在工作中的使用

    为了尽可能的减少全局变量的污染,在写js的时候可以采用单例模式,形式如下: 比如有一个js叫demo.js,那么我们可以在js里这样写: var demo = {} 这样做的目的是将整个js当成一个对 ...

  5. 记录下工作中使用的pdf.js

    在工作中遇到一个通过网页的形式浏览pdf文件以及图片的需求,图片简单,直接通过网页的形式打开这个图片的URL即可.而pdf这边,通过查询发现有一个名为pdf.js的神器. 简单介绍下,它可以在html ...

  6. [工作中的设计模式]原型模式prototype

    一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.pro ...

  7. js的url中传递中文参数乱码,如何获取url中参数问题

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...

  8. 工作中使用seajs后的一些总结

    工作中用seajs一段时间了,小小地总结一下. 使用seajs五部曲: 1.布置你项目的目录结构 2.设置seajs的config项,我一般是单独一个js文件--> seajs-config.j ...

  9. js检测浏览器中是否安装了flash播放插件

    这两天工作中需要在网页中嵌入flash小游戏,我使用的是swfobject.js version:1.5.其他方面都很好,唯独版本检测这里一直没有搞通,后来实在无奈之下,改用js来检测浏览器的flas ...

随机推荐

  1. c语言统计一个文件中的单词,字符和行数

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  2. underscore.js 源码阅读 一 整体结构

    // 整个underscore的实现包在一个立即执行函数中,避免污染全局对象 // 通过call(this)来入全局变量 (function() { // 缓存this var root = this ...

  3. Git工具的使用教程

    Git 是一种版本控制工具,也叫作版本管理软件(分布式管理软件).这里介绍Git的基本使用步骤,关于 Git 更详细的介绍,读者可以参考其官方网站提供的文档. 1  安装Git 在Ubuntu系统中安 ...

  4. JAVA学习,是一条漫长的道路

    我在Java 1.0正式问世前就开始学习Java,这么多年过去了,到现在我的Java学习历程还没有停过.我阅读原文书,研究原始码,撰写程序,自认为走得扎实,不奢望一步登天.像我这样老式的学习方式,显然 ...

  5. HARBOR 仓库 API功能接口

    1       项目管理 1.1     查看仓库中项目详细信息 curl -u "admin:Harbor12345" -X GET -H "Content-Type: ...

  6. shell中数组讲解

    定义数组 在Shell中,用括号来表示数组,数组元素用"空格"符号分割开.定义数组的一般形式为: 代码如下: 数组名=(值1 值2 ... 值n) 例如: 代码如下: array_ ...

  7. git修改最后一次commit的内容

    提交修改 $ git add test.txt $ git commit -m "提交test.txt文件" 修改注释说明 如果需要修改commit的注释说明,则执行以下命令: $ ...

  8. C#之DataTable转List与List转Datatable

    闲来无事,只有写代码啦,以下为DataTable转List与List转DataTable的两个方法,主要技术点用到了反射原理: /// <summary> /// 模型转换类 /// &l ...

  9. Office 365 机器人(Bot)开发入门指南 (新篇)

    最近在整理书稿时,发现我在2017年7月份写的这篇 Office 365 机器人(Bot)开发入门 的内容,因为相关平台的升级,已经完全不能体现当前的开发过程,所以我再专门写一篇新的开发入门指南给有兴 ...

  10. ajax同步与异步的坑

      之前工作中一个需求,需要动态的添加一组下拉菜单并为这个菜单绑定一个插件,很明显获取数据用Ajax,这本身是没错的,坑就坑在我用了 同步请求,当服务器端正确返回数据时再去执行下一个方法,这逻辑本身没 ...