深入理解javascript学习笔记(一) 编写高质量代码


Posted in Javascript onAugust 09, 2012

一、变量

•全局变量
JavaScript的两个特征,不自觉地创建出全局变量是出乎意料的容易。首先,你可以甚至不需要声明就可以使用变量;第二,JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性(不是真正意义上的全局变量,可以用delete删除)

function sum(x,y) { 
// result 未声明,为隐式全局变量 
result = x + y; 
return result; 
} function foo() { 
// 使用任务链进行部分var声明,b为隐式全局变量 
var a = b = 1; 
}

建议:
function (x,y) { 
var a ,b ; 
a = b = 1;//a,b 为局部变量 
}

•var作用
通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。
// 定义三个全局变量 
var global_var = 1; 
global_novar = 2; // 反面教材 
(function () { 
global_fromfunc = 3; // 反面教材 
}()); // 试图删除 
delete global_var; // false 
delete global_novar; // true 
delete global_fromfunc; // true 
// 测试该删除 
typeof global_var; // "number" 
typeof global_novar; // "undefined" 
typeof global_fromfunc; // "undefined"

•单var形式声明变量
在函数顶部使用单var语句是比较有用的一种形式。所有未初始化但声明的变量的初始值是undefined
function func() { 
var a = 1, 
b = 2, 
sum = a + b, 
myobject = {}, 
i, 
j; 
// function body... 
}

•var散布问题
// 反例 
myname = "global"; // 全局变量 
function func() { 
alert(myname); //"undefined" var myname = "local"; alert(myname); // "local" } func();等同于: 
myname = "global"; // global variable 
function func() { 
var myname; // 等同于 -> var myname = undefined; 
alert(myname); // "undefined" 
myname = "local"; 
alert(myname); // "local"} 
func();

二 for循环

•建议使用

function looper() { 
var i = 0, 
max, 
myarray = []; 
// ... 
for (i = 0, max = myarray.length; i < max; i++) { 
// 使用myarray[i]做点什么 
} 
}

使用以下表达式代替i++
i = i + 1 
i += 1以下两种循环方式更快 
//第一种变化的形式: 
var i, myarray = []; 
for (i = myarray.length; i?-;) { 
// 使用myarray[i]做点什么 
} 
//第二种使用while循环: 
var myarray = [], 
i = myarray.length; 
while (i?-) { 
// 使用myarray[i]做点什么 
}

•for-in循环
应用在非数组对象的遍历上,数组使用正常的for循环,对象使用for-in循环。使用hasOwnProperty()方法,当遍历对象属性的时候可以过滤掉从原型链上下来的属性。

三 避免隐式类型转换

•坚持使用===和!==

四 避免使用eval,以及避免给setInterval(), setTimeout()和Function()构造函数传递字符串,用函数代替。

五 parseInt()数值转换

建议给基数参数赋值,

var month = "06", 
year = "09"; 
month = parseInt(month, 10);//开头为0的字符串会被当做8进制处理 
year = parseInt(year, 10);

六 编程规范

构造函数命名:MyConstructor();

一般函数命名:myFunction();

变量命名:firstName;

私有属性或方法:_secondeName,

常量:PI,MAX;

Javascript 相关文章推荐
个人总结的一些关于String、Function、Array的属性和用法
Jan 10 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
javascript发送短信验证码实现代码
Nov 12 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
Dec 08 Javascript
JavaScript面向对象程序设计教程
Mar 29 Javascript
jquery对象访问是什么及使用方法介绍
May 03 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
JS之获取样式的简单实现方法(推荐)
Sep 13 Javascript
js原生Ajax的封装和原理详解
Mar 11 Javascript
react中Suspense的使用详解
Sep 01 Javascript
通过原生vue添加滚动加载更多功能
Nov 21 Javascript
Vue 实现登录界面验证码功能
Jan 03 Javascript
JS数学函数Exp使用说明
Aug 09 #Javascript
基于jQuery实现左右div自适应高度完全相同的代码
Aug 09 #Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 #Javascript
用JQuery在网页中实现分隔条功能的代码
Aug 09 #Javascript
基于jQuery的简单九宫格实现代码
Aug 09 #Javascript
JavaScript基础知识之数据类型
Aug 06 #Javascript
jquery 插件学习(六)
Aug 06 #Javascript
You might like
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
php计算十二星座的函数代码
2012/08/21 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
JS表的模拟方法
2015/02/05 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Python实现115网盘自动下载的方法
2014/09/30 Python
Python实现自动上京东抢手机
2018/02/06 Python
django 自定义过滤器的实现
2019/02/26 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
爱心活动计划书
2014/04/26 职场文书
企业委托书范本
2014/09/13 职场文书
对照检查剖析材料
2014/09/30 职场文书
单位工作证明格式模板
2014/10/04 职场文书
护士年终个人总结
2015/02/13 职场文书
论语读书笔记
2015/06/26 职场文书
电台广播稿范文
2015/08/19 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis