深入理解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 相关文章推荐
jQuery的一些特性和用法整理小结
Jan 13 Javascript
UI Events 用户界面事件
Jun 27 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
Nov 19 Javascript
js中indexof的用法详细解析
Dec 24 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
javascript创建函数的20种方式汇总
Jun 23 Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
Oct 10 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
May 22 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
Nov 07 jQuery
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 Javascript
详解Vue数据驱动原理
Nov 17 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
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
php中的静态变量的基本用法
2014/03/20 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
JavaScript实现图片切换效果
2017/08/12 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
vue实现评价星星功能
2020/06/30 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
分享6个隐藏的python功能
2017/12/07 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
详解Python中的type和object
2018/08/15 Python
浅析python的Lambda表达式
2019/02/27 Python
教育系毕业生中文求职信范文
2013/10/06 职场文书
IT工程师岗位职责
2014/07/04 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
python绘制云雨图raincloud plot
2022/08/05 Python