深入理解JS中的变量及作用域、undefined与null

  Situation One

  

复制代码 代码如下:

  <script>

  var i; //全局变量

  //方法名是camel命名法

  //方法里面的变量是局部变量

  function sayHello(){

  var x=100;

  alert(x);

  x++;

  }

  sayHello(); //输出100

  alert(x); //报错,因为x是局部变量,访问不到

  </script>

  Situation Two

  

复制代码 代码如下:

  <script>

  function sayHello(){

  var x=100;

  if(x==100){

    var y=x+1;

    alert(y); //输出101

  }

  alert(y); //也输出101,在方法内部,不存在块级作用域,在C#中就不可以了!!!

  for(var i=0;i<2;i++){

    alert(i)

  } //在for循环里面定义的变量是块级作用域

  alert(i); //因为i是局部变量,所以输出2

  }

  sayHello();

  </script>

  注:变量使用前可以不用var声明,这样的变量会被认为是“全局变量”,但很少这样用

  关于undefined与null

  有以下几种情况的,变量的值为undefined

  1、变量定义,但没有赋值,则变量的值为undefined

  2、调用的方法没有返回值,在返回的值为undefined

  3、对象的属性值不存在,则返回值为undefined,如:document.ddd

  Example1:

  

复制代码 代码如下:

  var xx;

  var yy=null;

  if(xx==yy){

  alert('相等');

  }

  else{

  alert('不等');

  }

  输出结果为相等,因为在进行if判断时,浏览器会对xx及yy进行值的判断,因为两者都没有具体的值,认为他们都是false。

  如果if判断中换成===[全等于符号],则输出不等!因为===表示要求xx及yy的数据类型和值都要相同才可以!

  Example2:

  

复制代码 代码如下:

  var xx=10

  var yy='10';

  if(xx==yy){

  alert('相等');

  }

  else{

  alert('不等');

  }

  输出相等,如果换成===,则输出不等

  Example3:

  

复制代码 代码如下:

  var n='10';

  switch(n){

  case 10:

    alert('数字');

  break;

  case '10':

    alert('字符串');

  break;

  }

  输出 字符串

  switch中的判断要考虑类型

  总结:if中的判断是判断数值,不考虑类型