深入理解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 相关文章推荐
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
May 07 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
javascript:window.open弹出窗口的位置问题
Mar 18 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
Jquery 效果使用详解
Nov 23 Javascript
浅谈react+es6+webpack的基础配置
Aug 09 Javascript
详解使用jQuery.i18n.properties实现js国际化
May 04 jQuery
angular4中引入echarts的方法示例
Jan 29 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
使vue实现jQuery调用的两种方法
May 12 jQuery
原生JS 实现的input输入时表格过滤操作示例
Aug 03 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 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
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
PHP闭包函数详解
2016/02/13 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
php获取微信openid方法总结
2019/10/10 PHP
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
node中的session的具体使用
2018/09/14 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
Django添加sitemap的方法示例
2018/08/06 Python
python读取各种文件数据方法解析
2018/12/29 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
浅谈Python中的字符串
2020/06/10 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
部队学习十八大感言
2014/01/11 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
企业投资意向书
2015/05/09 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript