JavaScript高级程序设计(第3版)学习笔记5js语句
语句一览
对于语句,说明如下:
1、关于语句要不要加上分号结束符(;),我的观点是给每条语句都加上,不要让引擎去猜测你的程序。不过昨天看到一篇文章和我的观点正好相反,也颇能言之成理,虽然并没有改变我的观点,不过倒也令我的眼界更为宽阔。
2、对于var语句,由于ECMAScript中有声明提升现象,建议将一个作用域中用到的变量都放到顶部,用一个var语句定义多个变量,这样容易理解,也不易出错。目前很多JS库也多采用这种形式,下面是取自jQuery开始中的代码:
vardocument=window.document,
navigator=window.navigator,
location=window.location;
3、用于语句块的({}),也可用于定义对象字面量。在ECMAScript中,没有块级作用域。
4、对于四种循环语句(do-while、while、for、for-in),由于for-in语句每次循环都会搜索对象本身和其原型,因此效率会比较低。关于for循环语句的优化:
//1.一般for循环
for(vari=0;i<arr.length;i++){
}
//2.上面在每一次循环都会重新计算一次arr的长度,如过arr是dom操作的话,会非常明显的影响效率,可以改进一下
for(vari=0,l=arr.length;i<l;i++){
}
//3.这样整个循环就只会计算一次长度,如果考虑到递减,还可以修改成
for(vari=arr.length;i>0;i--){
}
//4.上面不使用中间变量并且只需要计算一次长度,如果再考虑到长度永远是一个不小于0的数,并且在JS中0的Boolean值为false,可以进一步修改成
for(vari=arr.length;i;i--){
}
//5.考虑到JS中变量声明提升可能的影响,为了消除隐患,再修改为
vari=arr.length;
for(;i;i--){
}
5、对于with语句,虽然有时会提供快捷,但是也常常会导致不可预料的结果,建议少用,甚至不用:
//1.使用with语句
with(obj){
a=b;
}
//2.不使用with语句,和1的情况等价
if(obj.a===undefined){
a=obj.b||b;
}else
{
obj.a=obj.b||b;
}
//3.可能的结果
a=b;
a=obj.b;
obj.a=b;
obj.a=obj.b;
第1部分是使用with语句,第2部分是不使用with语句的等价语句,第3部分则是最终可能的运行结果,如果仅从with语句本身来看,很不容易明白程序实际运行时会发生什么。另外,在使用with语句涉及修改的时候,会有不同步的问题,看下面的代码:
varobj={
person:{
name:"linjisong"
}
};
with(obj.person){
obj.person={
name:"oulinhai"
};
console.info(obj.person.name);//oulinhai
console.info(name); //linjisong
}
在这里会不经意间就产生了一个不同步。
6、在return语句返回时需注意:
return
{
prop:"value";
}//由于引擎会自动添加分号,这里实际会返回undefined
return{
prop:"value";
}//返回一个对象
相关文章
- JavaScript笔记(13)
- JavaScript笔记(15)
- 【学习笔记】JavaScript
- JavaScript学习总结(十六)——Javascript闭包(Closure)详解编程语言
- 《JavaScript DOM编程艺术》学习笔记(三)详解编程语言
- BOM、DOM学习笔记——JavaScript详解编程语言
- JavaScript中级笔记第五章面向对象的基础
- JavaScript学习笔记(五)
- JavaScript学习笔记(七)字符串的连接
- JavaScript笔记二Array和Date对象方法
- JavaScript高级程序设计DOM学习笔记
- JavaScript高级程序设计事件学习笔记
- javascript权威指南学习笔记之变量作用域分享
- 《JavaScript高级程序设计》阅读笔记(一)ECMAScript基础
- javascript学习笔记(十九)节点的操作实现代码
- JavaScript高级程序设计阅读笔记(十三)js定义类或对象
- JavaScript高级程序设计阅读笔记(十四)js继承机制的实现
- JavaScript高级程序设计阅读笔记(十六)javascript检测浏览器和操作系统-detect.js
- JavaScript高级程序设计(第3版)学习笔记4js运算符和操作符
- Javascript学习笔记之数组的构造函数
- Javascript学习笔记之对象篇(四):forin循环
- JavaScript学习笔记之语句
- Javascript中call与apply的学习笔记