js笔记1

[/code]1、不使用var创建的变量,是隐含的全局变量,尽管它是在函数内部创建的,可以使用delete操作符删除。这表明隐含全局变量严格来讲不是真正的变量,而是全局对象的属性,属性可删除。[code="javascript"]
(function(){
global_var=3;
}())
alert(global_var);//alert 3


2、javascript允许在函数的任何地方声明多个变量,无论在哪声明,效果都等于在函数顶部进行声明。这就是所谓的“提升”。

myname="global";
function func(){
alert(myname);//“undefined”
var myname="local";
alert(myname);//局部变量
}


3、for循环经常用在遍历数组或者类数组对象。
建议使用以下格式:

var i,marry=[];
for ( i = marry.length; i--;){
//do something
}

[list]
[*]使用最少的变量
[*]逐步减至0,通常更快,因为同0比较比同数组长度,或者非0数组比较更有效率
[/list]

4、for-in 循环
通常用于遍历非数组对象,技术上来说也可以用于遍历数组(在javascript中,数组也是对象)。
当遍历对象属性来过滤遇到原型链的属性时,使用hasOwnProperty()方法。

5、隐式类型转换应该避免使用
javascript在使用比较语句时会执行隐式类型转换,这也是为什么执行 false==0或者""==0这类比较语句后悔返回true;

var zero=0;
if(zero===false){
//执行严格的等价比较,代码未执行
}
if(zero==false){
//隐式类型转换,这块代码会被执行
}


6、避免使用eval()
eval()可以将任意字符串当做一个javascript代码来执行。如果代码是运行时动态生成的,建议用其他方法来替代。


//不建议
var property="name";
alert(eval("obj."+property));

//建议
var property="name";
alert(obj[property]);

//不建议
setTimeout("myFunc()", 1000);

//建议
setTimeout(myFunc, 1000);



如果一定要使用eval(),可以考虑使用new Function()来替代eval().
好处:new Functon()中的代码在局部函数中运行,任何[b]采用var[/b]定义的变量都不会自动成为全局变量。
也可以将eval调用封装到一个即时函数中。

var jsstring="var un=1;console.log(un);";
eval(jsstring);//un全局变量

jsstring="var deux=2;console.log(deux);";
new Function(jstring)());//Function与new Function是一样的。deux局部变量

jsstring="var trois=3;console.log(trois);";
(function(){
eval(jsstring);
}());//即时函数,trois局部变量


另一个new Functon()和eval()的区别在于eval()会影响到作用域链,而无论在哪执行Function()它都仅仅能看到全剧作用域。

(function(){
var local=1;
eval("local=3;console.log(local);");// logs 3
console.log(local);//logs 3
}());

(function(){
var local=1;
Function("console.log(local);")();//logs undefined
}());


7、使用parseInt()的数值约定
parseInt()最好加上进制参数,parseInt("12",10);
另一个将字符串转换为数值的方法是:
+"08"; //结果是8
Number("08");//结果是8
这种方法通常会比parseInt()快很多,parseInt()是解析不是转换。
但如果输入"08 hello",除了parseInt()其他方法都会失败并返回NaN。

8、检查是否数组
可以使用Array.isArray(arg);
如果不能用Array.isArray()可以使用如下形式进行检查

if(typeof Array.isArray === "undefined"){
Array.isArray=function(arg){
return Object.prototype.toString.call(arg)==='[object Array]';
};
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值