20条常见的编码陷阱之JavaScript篇
不管你现在的编程技能有多么的高超 曾经你也是个亦步亦趋 不断的学习的初学者 在编程这条曲折的道路上 我想你肯定犯过一些低级的错误 遇见过一些普通的编码陷阱
不必要的DOM操作
例如下面这段代码
// anti pattern
for (var i = ; i < ; i++){
var li = $( <li> ) ( This is list item # + (i+ ))
$( #someUL ) append(li)
}
这段代码对DOM进行了 次修改 并且创建了 个不必要的jQuery对象 正确的做法是使用一个文档片段 或者创建一个字符串 把 个<li>元素赋给该字符串 然后附加到HTML中 这样就只需运行DOM一次 代码如下
var liststring = ;
for (var i = ; i > ; i ){
liststring += <li>This is list item # + ( i)
}
document getElementById( someUL ) innerHTML(liststring)
正如上面所描述的一样 下面再提供一个方式 使用数组
var liststring = <li>
var lis = [];
for (var i = ; i > ; i ){
lis push( This is list item # + ( i))
}
liststring += lis join( </li><li> ) + </li> ;
document getElementById( someUL ) innerHTML(liststring)
这是在JavaScript创建重复HTML最快最简单的方法 无需使用模板库或框架
不一致的变量名和函数名
这个问题是非常重要的 尤其当你在别人的代码上工作时 一定要保持标识符(变量名和函数名)一致 例如下面这段代码
var foo = bar ;
var plant = green ;
var car = red ;
通常 人们并不会设置变量名叫Something 这涉及到命名规则问题 命名应清晰明了 一目了然 很多编程语言地变量命名都使用大写
下面是对函数的命名
function subtractFive(number){
return number ;
}
语法结构清晰并且能起到解释性功能
例如想要对给定的数字加 仍采用上述命名模式 比如
function addFive(number){
return number + ;
}
有时 你会根据返回值命名 例如该函数要返回一个HTML字符串 那么可以命名为getTweetHTML() 如果函数只是做一些操作 无需返回值 那么可以在前面加一个do前缀 例如doFetchTweets()
构造函数通常会遵循类原则 大写第一个字母
function Dog(color){
lor = color;
}
命名应带有描述性 比如操作型的函数在前面加do 另外要具备可读性和提示性
在for…Loops中使用hasOwnProperty()方法
JavaScript数组是没有关联的 可以把它当做哈希表 使用循环来遍历对象属性
for (var prop in someObject) {
alert(someObject[prop]) // alert s value of property
}
然而 存在的问题是for…in loop是在对象属性链上遍历每个枚举类型的属性 如果你只想使用对象实际拥有的属性 这可能有问题的 那怎么解决呢?你可以使用hasOwnProperty()方法 代码如下
for (var prop in someObject) {
if (someObject hasOwnProperty(prop)) {
alert(someObject[prop]) // alert s value of property
}
}
比较布尔值
把布尔值作为条件进行比较 其实这是在浪费电脑的计算时间 看下面这个例子吧
if (foo == true) {
// do something for true
} else {
// do something for false
}
其实foo==true这个比较完全是多余的 因为foo已经是布尔类型 直接这样写就行
if (foo) {
// do something for true
} else {
// do something for false
}
又或者这样写
if (!foo) {
// do something if foo is false
} else {
// do something if foo is true
}
事件绑定
在JavaScript中 事件是个复杂的问题 事件冒泡(event bubbling)和委托正在取代内联事件(inline onclick)操作(一些特殊的 初始页 除外)
假设你有一个图片网格 需要启动一个modal lightbox窗口 千万不要采取下面的做法 示例采用的是jQuery 如果你使用相似的库或者其他 冒泡机制也同样适合传统的JavaScript
相关的HTML代码
<div id= grid container >
<a ><img src= someimage thumb jpg ></a>
<a ><img src= someimage thumb jpg ></a>
<a ><img src= someimage thumb jpg ></a>
…
</div>
不好的JavaScript写法
$( a ) on( click function() {
callLightbox(this)
})
这段代码假设调用lightbox 里面传递一个anchor元素并且引用全屏图片 与其绑定每个anchor元素还不如直接使用#grid container元素
$( #grid container ) on( click a function(event) {
callLightbox(event target)
})
在这段代码中 this和event target都表示anchor元素 同样你也可以在任何父元素上使用 只要保证所定义的元素是事件目标就行(event s target)
避免三元冗余
在JavaScript和PHP中 过度使用三元语句是很常见的事情
// javascript
return foo toString() !== ? true : false;
// php
return (something()) ? true : false;
条件判断的返回值永远只有false和true 言外之意就是你无需把true和false显示添加到三元运算中 相反 你只需简单的返回条件
// javascript
return foo toString() !== ;
// php
lishixinzhi/Article/program/Java/JSP/201311/19714
20条常见的编码陷阱之JavaScript篇
答:不必要的DOM操作 例如下面这段代码 // anti pattern for (var i = ; i < ; i++){ var li = $( <li> ) ( This is list item # + (i+ ))( #someUL ) append(li)} 这段代码对DOM进行了 ...
Java面试中有哪些陷阱
答:Java程序员面试常见陷阱一、final finally finalize的区别 1、final修饰符,Java中的关键字,用final修饰变量的必须在声明时就给定初始值,而且不允许被修改;用final修饰方法不允许被重写;用final修饰的类不允许被继承。2、finally...
JAVA编码规范
答:(9) 若不得已进行一些不太雅观的编程,至少应该把那些代码置于一个类的内部。 (10) 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作(参见第14章14.1.2小节的"用内部类改进代码")。
Scala代码编写中常见的十大陷阱
答:case int => println( List of Ints ) case java lang String => println( List of Strings ) case _ => println( Something else ) } 设计错误 Implicit关键字的使用不小心 Implicits非常强大 但要小心 普通类型不能使用隐式...
java如何判断编码是否是utf8编码
答:UTF-8编码规范 及如何判断文本是UTF-8编码的UTF-8的编码规则很简单,只有二条:1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。2)对于n字节...
java 怎么获得文件编码格式
答:Java如何获取文件编码格式1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK。 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三...
java中常见的异常类
答:从异常类的继承架构图中可以看出:Exception 类扩展出数个子类,其中 IOException、RunntimeException 是较常用的两种。习惯上将 Error 与 Exception 类统称为异常类,但这两者本质上还是有不同的。Error 类专门用来处理严重影响...
在搜索引擎课抓起的信息中以哪种方哪种形式比较难以抓取的?
答:搜索引擎最常见的一种是Flash 各种跳转也是蜘蛛陷阱之一,除了301转向以外,搜索引擎对其他形式的跳转都比较敏感,如:302跳转,JavaScrt跳转,Flash跳转,Meta 动态URL不利于搜索引擎蜘蛛爬行,应该尽量避免 链接编码是Javascript...
"javasc#ipt:void(0)" 是什么意思
答:这是个病毒,用360专杀先查杀再修复一下~另外检查快速启动栏IE图标,右键点属性,看目标那一项,正确值应为"C:\Program Files\Internet Explorer\IEXPLORE.EXE",看看后面是不是跟了东西?如果有,删掉!
不利于搜索引擎爬行和抓取的蜘蛛陷进有哪些
答:各种跳转也是蜘蛛陷阱之一,除了301转向以外,搜索引擎对其他形式的跳转都比较敏感,如:302跳转,JavaScrt跳转,Flash跳转,Meta Refresh跳转。有些网站用户访问首页时会被自动转向到某个目录下的页面。但大部分这种首页转向看不...