最近在看深入理解javascript系列,由于个人能力问题,不能全部看懂,便把一些不太难的记录下来,做了些笔记
这是原文的地址,大家有兴趣可以取看看http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html
1. 减少全局变量的使用。
全局变量的使用可能会导致与自己的写的脚本,或第三方脚本发生命名冲突,导致一些脚本代码的变量被覆盖从而失效
同时需要有可能会发生隐式创建全局变量的时候,有如下几种情况
<span style="white-space:pre"> </span>1. <script type="text/javascript"> function t(){ a = 1;//隐式创建了一个全局变量,应改为var a = 1; //.... } t(); alert(a); </script>
这种情况下,警告框的值为1。因为当不用var声明的时候,就相当于隐式创建了一个全局变量
<span style="white-space:pre"> </span>2. <script type="text/javascript"> function t(){ var a = b = 1; //.... } t(); //alert(a); //alert(b); </script>
这种情况下,a是局部变量,而b是全局变量,因为var a = b = 1;相当于
b = 1;
var a = 1;
这样就和第一种情况一样了
2. var在函数中位置不同的问题
var在函数中使用的地方不一样,结果就会像在开头声明一样,如下代码
<span style="white-space:pre"> </span> a = 1; function fun(){ alert(a);//undefined var a = 2; <span style="white-space:pre"> </span> alert(a)//2 } fun();
这种情况和预想的不一样,即第一个alert找不到函数声明的a,则会调用全局变量a,但是却不是这样的,原因是
即使var声明在第二句话,但是它相当于如下的效果
<span style="white-space:pre"> </span>a = 1; function fun(){ var a; <span style="white-space:pre"> </span> alert(a);//undefined a = 2; alert(a)//2 } fun();
即var会被放到函数最开头
3. == 和 ===的区别
== 是不严格的等于,而===是严格等于,且==在比较的时候如果类型不一样会进行类型转换,看下如下代码:
<span style="white-space:pre"> </span> alert("" == 0);//true alert("" === 0);//false alert(false == 0);//true alert(false === 0);//false
即"" == 0在比较的时候会将""转化成0再进行比较,其他类似而===当类型不同的时候就返回false了。
4. var声明的全局变量不能被删除
看如下代码
<span style="white-space:pre"> </span>a = 1; alert(a);//1 delete a; alert(a)//报错 //而如下的代码 var a = 1; alert(a);//1 delete a; alert(a)//1
即var声明的全局变量不能被delete删除