好的,废话不多说,接着上篇来.

变量(variables)

始终使用 var keyword来定义变量,假设不这样将会导致 变量全局化,造成污染.

//bad

superPower = new SuperPower();

//good

var superPower = new SuperPower();

使用 一个 varkeyword来定义多个变量...而且每一个变量一行..

// bad

    var items = getItems();

    var goSportsTeam = true;

    var dragonball = 'z';



    // good

    var items = getItems(),

        goSportsTeam = true,

        dragonball = 'z';

//我个人更喜欢以下这样的定义方法.

var items = getItems()

        ,   goSportsTeam = true

        ,   dragonball = 'z';

将未赋值的变量放在后面...

// bad

    var i, len, dragonball,

        items = getItems(),

        goSportsTeam = true;



    // bad

    var i, items = getItems(),

        dragonball,

        goSportsTeam = true,

        len;



    // good

    var items = getItems(),

        goSportsTeam = true,

        dragonball,

        length,

        i;

将变量的定义和赋值放在 作用域的顶部,这样能避免 变量提升相关的问题..

// bad

    function() {

      test();

      console.log('doing stuff..');



      //..other stuff..



      var name = getName();



      if (name === 'test') {

        return false;

      }



      return name;

    }



    // good

    function() {

      var name = getName();



      test();

      console.log('doing stuff..');



      //..other stuff..



      if (name === 'test') {

        return false;

      }



      return name;

    }

// bad

    function() {

      var name = getName();



      if (!arguments.length) {

        return false;

      }



      return true;

    }



    // good

    function() {

      if (!arguments.length) {

        return false;

      }



      var name = getName();



      return true;

    }

//上面这个样例我感觉这么奇葩呢...这个name根本没有起到不论什么作用啊...

Hoisting (国内书籍翻译为 提升)

变量的定义会得到提升,也就是移动到作用域的顶部 ,可是 赋值并没有得到提升..

举个简单的样例..对于简单的 var a = 10;

事实上经历的是两个过程,

① var a;

② a = 10;

恩,,变量提升仅仅是提升的第一部分,而第二部分并没有得到提升...

function example() {

      console.log(declaredButNotAssigned); // => undefined

      var declaredButNotAssigned = true;

    }

function example() {

      var declaredButNotAssigned;

      console.log(declaredButNotAssigned); // => undefined

      declaredButNotAssigned = true;

    }

匿名函数表达式提升的仅仅是变量的名称,而不是函数的定义..

function example() {

      console.log(anonymous); // => undefined



      anonymous(); // => TypeError anonymous is not a function



      var anonymous = function() {

        console.log('anonymous function expression');

      };

    }

命名函数提升的相同是变量的名称,而不是函数的名称.或者是函数体..

function example() {

      console.log(named); // => undefined //变量名得到提升..



      named(); // => TypeError named is not a function //函数体没有得到提升..



      superPower(); // => ReferenceError superPower is not defined //函数名没有得到提升..



      var named = function superPower() {

        console.log('Flying');

      };

    }

函数定义同一时候提升他们的名称和函数体..

function example() {

      superPower(); // => Flying



      function superPower() {

        console.log('Flying');

      }

    }

//这也就是为什么我们在我们代码的底部通过这样的方式可以訪问,可是依照之前的方式定义函数无法訪问的原因了..

//如今大家明确了吧..

Contional Expressions & Equality  条件表达式和 等式..

条件表达式会通过 类型转换 来对括号内的内容进行评估来返回 Boolean值..

转换会遵循下面规则:

1,对象返回 true

2,underfined 返回false

3, Null 返回false

4, Booleans类型就返回自己.

5, +0,0,-0,NaN 返回false ,其它返回true

6, 空字符返回false..//注意注意,假设你的字符串里面有 空格,则相同会返回true

if([0]) {

//true

//这个array 是我们之前提过的,是通过字面量来进行数组的创建.... 当然返回true,不要被 0 迷惑了..

}

// bad

    if (name !== '') {

      // ...stuff...

    }



    // good

    if (name) {

      // ...stuff...

    }



    // bad

    if (collection.length > 0) {

      // ...stuff...

    }



    // good

    if (collection.length) {

      // ...stuff...

    }

代码块..

// bad

    if (test)

      return false;



    // good

    if (test) return false;



    // good

    if (test) {

      return false;

    }



    // bad

    function() { return false; }



    // good

    function() {

      return false;

    }

// bad

    var x=y+5;



    // good

    var x = y + 5;

Javascript 正确用法 二的更多相关文章

  1. JavaScript高级用法二之内置对象

    综述 本篇的主要内容来自慕课网,内置对象,主要内容如下 1 什么是对象 2 Date 日期对象 3 返回/设置年份方法 4 返回星期方法 5 返回/设置时间方法 6 String 字符串对象 7 返回 ...

  2. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  3. C#中dynamic的正确用法

    C#中dynamic的正确用法  http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4 ...

  4. C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  5. 【转】改善C#程序的建议2:C#中dynamic的正确用法 空间

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  6. C#中dynamic、ExpandoObject 的正确用法

    原文地址:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynam ...

  7. C#中dynamic的正确用法【转】

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  8. [No0000179]改善C#程序的建议2:C#中dynamic的正确用法

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  9. 【转】C#中dynamic的正确用法

    原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic ...

随机推荐

  1. 返回hash 类型的json

    else{ $hash{$phone}="没有找到需要的验证码信息"; $c->render(json =>  \%hash );

  2. Mongodb 设置密码

    Mongodb 配置用户密码: 首先创建admin数据库的用户密码 再创建pics的用户名密码 > show databases; admin 0.203125GB local 0.078125 ...

  3. poj 2250 Compromise(区间dp)

    题目链接:http://poj.org/problem?id=2250 思路分析:最长公共子序列问题的变形,只是把字符变成了字符串,按照最长公共子序列的思路即可以求解. 代码如下: #include ...

  4. 配置php网页显示错误

    发现问题比解决问题重要,使用php集成开发环境Appserv网页会提示各种语法错误,但自己配置开发环境无法提示错误,特别当不是语法错误,比如com组件的调用,当不知道问题出现在何处,是不能忍受的,这时 ...

  5. poj 3281 Dining 网络流-最大流-建图的题

    题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...

  6. MVC自定义AuthorizeAttribute实现权限管理

    [转]MVC自定义AuthorizeAttribute实现权限管理 原文载自:小飞的DD http://www.cnblogs.com/feiDD/articles/2844447.html 网站的权 ...

  7. Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性

    Architectures 这代表,在这个项目里你想要Xcode编译的目标设备列表. Valid Architectures 还不是太明确这个设置的意图,但是一般来说是不需要更改的,和Architec ...

  8. memset函数的使用

    void *memset(void *s, int ch, size_t n); 说明:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 关于mem ...

  9. xzzx

    创建包: CREATE OR REPLACE PACKAGE WYL_TEST_PKG_GGYW_XZZX IS -- Purpose : 公共业务-参保险种注销 --注销选择的险种,并将参保缴费信息 ...

  10. HTTP 教程 转自 http://www.w3cschool.cc/http/http-tutorial.html

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基于TCP/IP通信 ...