1.对字符串使用单引号(避免动态添加元素时html会出现的双引号"引起的冲突,方便操作 - 单引号一个键,双引号两个键)

    // bad
var name = "Barrior"; // good
var name = 'Barrior';

2.使用一个 var 声明多个变量,用逗号隔开。

    // bad
var items = getItems();
var goSportsTeam = true;
var dragonball = 'z'; // good
var items = getItems(),
goSportsTeam = true,
dragonball = 'z';

然后,一个 var 声明多个变量,可能会在修改时造成逗号和分号的混淆。如果压缩,压缩工具会自动减少var的声明,变成【good】的这种形式,所以,为了后期维护,就都加上var吧,像【bad】这样,注意适当,美观和可读性最重要,var满天飞也不好。

3.以后赋值的变量不需要赋初始值。

    // bad
var timer=null;
clearInterval(timer);
timer=setInterval(function(){
...code
},1000); // good
var timer;
clearInterval(timer);
timer=setInterval(function(){
...code
},1000);

4.值为基本类型的相等变量写在一起(更新:不能写在一起)。

    // bad
var a=4,
b=4;
b=5;
console.log(b) //
console.log(a) // // good
var a=b=4;
b=5;
console.log(b) //
console.log(a) //4 2015.08.27更新:其实不能写在一起,后面的变量的作用域改变了,示例:

function fn(){
  var a=b=4;
  b=5;
  console.log(b) //5
  console.log(a) //4
}

fn();

console.log( b ) //5
console.log( a ) //Uncaught ReferenceError: a is not defined

如上,虽然输出没有影响,但是变量的作用域却改变了,a的作用域还是原本的作用域fn,而b的作用域却上升到了window

如果是引用类型的就不要写一起,写一起容易导致修改一个变量的值牵连另一个变量跟着改变。以下引用变量被重新赋值,不会影响其他变量①,但是对变量通过引用类型的方法改变变量的值,就会影响其他变量②。

    ①、
var a=b=[];
b=5;
console.log(b) //
console.log(a) //[] ②、
var a=b=[];
b.push(5);
console.log(b) //[5]
console.log(a) //[5]

5.语句结束的分号。

    //bad?
(function() {
var name = 'Barrior';
return name;
})() //good
(function() {
var name = 'Barrior';
return name
})()
//最后不加分号;其实每行都不加分号都没问题,浏览器会自动给换行加上分号(每行能够形成独立的逻辑语义),即便压缩,好像压缩也会自动给换行加上分号,而且最后一行是没有分号的。

6.使用字面量创建对象

    //bad
var arr=new Array(),
obj=new Object(); //good
var arr=[],
obj={};

7.条件表达式和等号的快捷操作。

  条件表达式的强制类型转换遵循以下规则:

    ▊ 对象 被计算为 true

    ▊ Undefined 被计算为 false

    ▊ Null 被计算为 false

    ▊ 布尔值 被计算为 布尔的值

    ▊ 数字 如果是 +0, -0, or NaN 被计算为 false , 否则为 true

    ▊ 字符串 如果是空字符串 '' 则被计算为 false, 否则为 true

    // bad
if (name !== '') {
...code
} // good
if (name) {
...code
} // bad
if (oTest != false) {
...code
} // good
if (!oTest) {
...code
} // bad
if (arr.length > 0) {
...code
} // good
if (arr.length) {
...code
}

8.使用1替代true,0替代false(因为在javascript语言中 true等于1,false等于0。因此,脚本包含的字面变量true都可以用1来替换,而false可以用0来替换。 )。

    //bad
var b=true;
if( b ){
...code
} //good
var b=1;
if( b ){
...code
}

9、对有序集合进行顺序无关的遍历时,使用逆序遍历。逆序遍历可以节省变量,代码比较优化。

    var len = elements.length;
while (len--) {
var element = elements[len];
// ......
}

10.运算符优先级及简写。

  Js运算符优先级:

  JavaScript在计算表达式时具有较高优先级的运算符先于较低优先级的运算符执行;例如,乘法的执行先于加法;下表按从最高到最低的优先级列出JavaScript运算符,具有相同优先级的运算符按从左至右的顺序计算。

优先级

运算符

说明

最高

.  []  ()

字段访问、数组索引、函数调用和表达式分组

由高到低

依次排列

++  --  ~  !  delete  new  typeof  void

一元运算符、对象创建、

返回数据类型、未定义的值

*  /  %

乘法、除法、取模

+  -  +

加法、减法、字符串连接

<<  >>  >>>

移位

<  <=  >  >=  instanceof

小于、小于或等于、大于、大于或等于、

是否为特定类的实例

==  !=  ===  !==

相等、不相等、全等、不全等

&

按位“与”

^

按位“异或”

|

按位“或”

&&

逻辑“与”

||

逻辑“或”

?:

条件运算

=  +=  -=  *=  /=  %=  &=  |=  ^=  <<=  >>=

赋值、赋值运算

最低

,

多重求值

● if语句转用&&符号。

    //bad?
var a=true,
b;
if(a){
b=5
} //good?
var a=true,
b;
if(a) b=5 //good?
var a=true,
b;
a && (b=5)

● if...else语句转用三目运算。

    //bad?
var a=1,
b; if( a ){
b=5
}else{
b=4
} //good?
var a=1,
b;
b = a ? 5 : 4

● 多个运算符一起操作,示例[1]

    //bad?
lineBox.on('click','a',function(){
if( $(this).text()=='添加分组' ){
addCon.val('').focus();
hint.removeClass('red-text')
}
}); //good?
lineBox.on('click','a',function(){ $(this).text()=='添加分组' && addCon.val('').focus() && hint.removeClass('red-text') });

● 多个运算符一起操作,表单验证;DOM操作使用jQuery。

    <form action="#" method="post">

        <input type="text" />

        <input type="password" />

        <input type="submit" value="提交" />

    </form>

    $('form').submit(function(){

        return check( $('input[type=text]'),'请输入用户名' ) && check( $('input[type=password]'),'请输入密码' )

    });
//【&&】运算规则:先执行左侧(文本的返回值),如果是false,那么停止执行,直接返回false,如果为true,那么执行后面一个值(密码的返回值)②;如果②为false,整个表达式直接返回false,如果为true,依次类推继续执行后面的值。 function check(obj,text){ return obj.val() ? true : (alert(text),false) }
//表达式运算流程:如果传进来的obj有val()值,那么返回【?】后面的true,如果没有值则执行【:】后面的小括号(小括号的优先级最高,所以里面的内容被独立成了一个)里面的内容,里面内容除了逗号没有其他运算符,所以执行顺序从左至右。
//如果改成这样:return obj.val() ? true : alert(text) , false
//运算流程:根据运算符优先级,表达式被分为三目运算(三目运算里再被分为true,和alert(text)两块),和false两块;这里的【,】运算符的作用是返回【,】右侧的值。所以,return 后面如果有多个表达式,且表达式之间由【,】隔开,整个return返回的是最后一个【,】右侧的值。所以这个表达式不管传进来的obj是否有值都返回了false。

附:

【|=】运算规则:对变量值与表达式值执行按位“或”运算,并将结果赋给该变量(https://msdn.microsoft.com/library/81bads72(v=vs.94).aspx)。

示例解释:

i = 1;   //二进制为0001

i | 2;   //2的二进制为0010 两个按位或为0011也就是3

i |= 2 等价于 i = i | 2;

所以 i 为 3

参考:

http://www.codeceo.com/article/javascript-guide.html

http://www.cnblogs.com/jclser/archive/2010/02/17/1668922.html

http://www.tashan10.com/kan-liao-zhe-ge-cai-fa-xian-jqueryyuan-dai-ma-bu-shi-na-yao-hui-se/

https://github.com/ecomfe/spec/blob/master/javascript-style-guide.md

最后修改时间:2015-08-07

Js极客之路 - 简化操作的更多相关文章

  1. Js极客之路 - 优化操作(性能优化)

    1.因为每次For循环都会计算一次arr.length,所以有必要存储数组长度以减少计算.针对这篇文章(http://www.crimx.com/2015/04/21/should-array-len ...

  2. AI 开发路漫漫,什么才是真正的极客精神?

    摘要:AI开发看上去很美,实践起来却不是一件容易的事.一个聪明的开发者知道借助工具提升开发效率,一个智能的平台则会站在开发者的立场,为用户提供贴心服务. 前言 “理想很丰满,现实很骨感.”如果用一句话 ...

  3. [2013 eoe移动开发者大会]靳岩:从码农到极客的升级之路

    (国内知名Android开发论坛 eoe开发者社区推荐:http://www.eoeandroid.com/) 前天,2013 eoe 移动开发者大会在国家会议中心召开,eoe 开发者社区创始人靳岩在 ...

  4. [web建站] 极客WEB大前端专家级开发工程师培训视频教程

    极客WEB大前端专家级开发工程师培训视频教程  教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5 ...

  5. Node.js博客搭建

    Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...

  6. 如何在node和vue前后端分离的项目中使用极客验证,用node的方式

    1.用express的脚手架和vue-cli的脚手架搭建的项目目录如下图 2.在vue-client的src/component新建一个login.vue文件,作为登录页面,代码如下 <temp ...

  7. 极客Web前端开发资源集锦

    本周我们带来的前端推荐包含当前热门的bootstrap,html5,css3等技术内容和新闻话题,如果你还想近一步学习如何开发,还可以关注我们的极客课程库,里面涵盖了现代开发技术的‘学’与‘习’的全新 ...

  8. 数据结构(逻辑结构,物理结构,特点) C#多线程编程的同步也线程安全 C#多线程编程笔记 String 与 StringBuilder (StringBuffer) 数据结构与算法-初体验(极客专栏)

    数据结构(逻辑结构,物理结构,特点) 一.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括: 集合 数 ...

  9. maven介绍 极客学院

    来自极客学院 Apache Maven 是一套软件工程管理和整合工具.基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建.报告和文档. Maven - 概述 M ...

随机推荐

  1. 实现一个正则表达式引擎in Python(一)

    前言 项目地址:Regex in Python 开学摸鱼了几个礼拜,最近几天用Python造了一个正则表达式引擎的轮子,在这里记录分享一下. 实现目标 实现了所有基本语法 st = 'AS342abc ...

  2. 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课

    前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...

  3. Hibernate 中setResultTransformer使用

    在使用hibernate框架,查询数据库多张表或者单张表的某几个需要的字段数据时,往往只能通过sql语句配合setResultTransformer将查询到的数据封装到一个map集合中,再将map集合 ...

  4. JDK 自带的性能监控工具

    JDK安装完后,其内置了许多的监控工具,常用的有jvisualvm,jconsole,jps,jmap,jinfo,jstat,jstack,这些命令都在jdk安装的bin目录下: 1.jvisual ...

  5. 根据vue-cli手摸手实现一个自己的脚手架

    故事背景 身为一个入门前端七个月的小菜鸡,在我入门前端的第一天就接触到了vue,并且死皮赖脸的跟他打了这么久的交到,还记得第一次用vue init webpack 这句命令一下生成一个模板的时候那种心 ...

  6. (八十二)c#Winform自定义控件-穿梭框

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  7. Java基础学习笔记(五) - 常用的API

    API介绍 概念:API 即应用编程程序接口.Java API是JDK中提供给我们使用的类说明文档,这些类将底层的代码实现封装.无需关心这些类是如何实现,只需要学习如何使用. 使用:通过API找到需要 ...

  8. [开源]如何使用goapp写你的后台管理系统_golang

    简析 基于 Gin + GORM + Casbin + vue-element-admin 实现的权限管理系统. 基于Casbin 实现RBAC权限管理. 前端实现: vue-element-admi ...

  9. EF Core设置字段默认时间

    ---恢复内容开始--- 在EF的官方文档上只提到了用 Fluent API来设置默认值. 但是我们日常开发中,会把公用字段都写成基类.比如行创建时间 在需要默认时间的字段加上一个特性 [Databa ...

  10. jmeter从获取token开始设计接口

    用自己实习时候的一个项目来实现一下获取token的接口测试 以登录dmp的学科列表为例子: 从登录开始,打开开发者选项 点击登录 在开发者窗口中network xhr Fildder中,看登录时的请求 ...