Javascript 正确用法 二

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

变量(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;

时间: 2024-08-04 22:26:56

Javascript 正确用法 二的相关文章

JavaScript高级用法二之内置对象

综述 本篇的主要内容来自慕课网,内置对象,主要内容如下 1 什么是对象 2 Date 日期对象 3 返回/设置年份方法 4 返回星期方法 5 返回/设置时间方法 6 String 字符串对象 7 返回指定位置的字符 8 返回指定的字符串首次出现的位置 9 字符串分割split() 10 提取字符串substring() 11 提取指定数目的字符substr() 12 Math对象 13 向上取整ceil() 14 向下取整floor() 15 四舍五入round() 16 随机数 random(

Javascript 正确使用方法 二

好的,废话不多说,接着上篇来. 变量(variables) 始终使用 var 关键字来定义变量,如果不这样将会导致 变量全局化,造成污染. //bad superPower = new SuperPower(); //good var superPower = new SuperPower(); 使用 一个 var关键字来定义多个变量...并且每个变量一行.. // bad var items = getItems(); var goSportsTeam = true; var dragonba

MySQL触发器的正确用法

一.创建触发器的基本语法: CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 触发器语句 触发事件包括:INSERT.UPDATE.DELETE 二.正确案例演示 如果想在sql文件中直接创建触发器,下面为一个完整的sql文件创建(含触发器的创建)示例: use mysql drop database if exists myTest; create database myTest default charset=gb2312; u

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

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject();Console.WriteLine(dynamicObject.Name);Console.WriteL

初始JavaScript Promises之二

初始JavaScript Promises之二 上一篇我们初步学习了JavaScript Promises,本篇将介绍Promise如何优雅地进行错误处理以及提升操作node.js风格1的异步方法的逼格,没错就是使用promisify2. 异步编程中的错误处理 人性的.理想的也正如很多编程语言中已经实现的错误处理方式应该是这样: try {     var val = JSON.parse(fs.readFileSync("file.json")); }catch(SyntaxErro

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

原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = Get

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

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dynamicObject.Name); Console.Writ

C#中dynamic的正确用法

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject();Console.WriteLine(dynamicObject.Name);Console.WriteL

改善C#程序的建议2:C#中dynamic的正确用法

原文:改善C#程序的建议2:C#中dynamic的正确用法 dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dyn