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. Java 截取字符串中指定数据及之后数据

    String resCallBackJson="12556{1{{{456858585{";        resCallBackJson = resCallBackJson.su ...

  2. 记一次处理mysql数据库无故锁表的经历

    某日,生产环境上的用户表突然无故锁表,原以为只是偶发的bug.所以第一时间想到的解决方案简单粗暴:重启数据库(service mysqld restart).问题得以解决. 10min后,该表再次锁表 ...

  3. JavaScript之基本语句

    前面的内容记录了JavaScript的一些基本概念,本次主要讲解一下JS中常用的语句. 和大多数其他编程语言一样,JS也主要包括:选择.循环.错误检测.函数等.JS的语句基本是由值.运算符.表达式.关 ...

  4. 阿里云服务器ecs配置之安装jdk

    一.安装环境 操作系统:Centos 7.4 JDK版本:1.8 工具:Xshell5.Xftp5 二.安装步骤 第一步:下载安装包 (官网)链接: 下载适合自己系统的jdk版本,如图:我下载的是64 ...

  5. Spring Boot (八): Mybatis 增强工具 MyBatis-Plus

    1. 简介 在上一篇文章<Spring Boot (七): Mybatis极简配置> 中我们介绍了在 Spring Boot 中 Mybatis 的基础使用方式,其中有一部分美中不足的是 ...

  6. Map(映射)

    散列表介绍: 数组和链表都可以是有序的(即存储顺序与取出顺序一致),但这样是有代价的,需要遍历才可以寻找某一特定元素: 而还有另外的一些存储结构:不在意元素的顺序,能够快速的查找元素的数据 其中就有一 ...

  7. 浅谈MVC&MTV设计模式

    在目前基于Python语言的几十个Web开发框架中,几乎所有的全栈框架都强制或引导开发者使用MVC设计模式.所谓全栈框架,是指除了封装网络和线程操作,还提供HTTP.数据库读写管理.HTML模板引擎等 ...

  8. 《构建之法》MSF&需求分析

    第七章 MSF MSF基本原则 推动信息共享与沟通 为共同的远景而工作 充分授权和信任 各司其职,对项目共同负责 交付增量的价值 保持敏捷,预期和适应变化 投资质量 学习所有的经验 与顾客合作 MSF ...

  9. springmvc中将servlet api对象作为处理方法的入参使用

    在springmvc中,控制器不依赖任何servlet api对象,也可以将servlet api对象作为处理方法的入参使用,非常方便,比如需要使用HttpSession对象,那么就可以直接将Http ...

  10. 【JAVA基础】JAVA基础语法

    1.1 Java语言概述什么是Java语言Java语言是美国Sun公司(Stanford University Network),在1995年推出的高级的编程语言. Java语言发展历史1995年Su ...