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

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中的判断是判断数值,不考虑类型

时间: 2024-10-30 21:59:51

深入理解JS中的变量及作用域、undefined与null_javascript技巧的相关文章

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

 本篇文章主要是对JS中的变量及作用域.undefined与null进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Situation One   代码如下: <script> var i; //全局变量 //方法名是camel命名法 //方法里面的变量是局部变量   function sayHello(){ var x=100; alert(x); x++; } sayHello(); //输出100 alert(x); //报错,因为x是局部变量,访问不到 </scr

浅析php中常量,变量的作用域和生存周期_php技巧

在PHP脚本中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等等,我们在使用它们的时候除了要正确地知道它们的语法以外,更重要的是,我们要知道它们在本质上的区别与联系-即它们的作用域的问题. 1.内置超级全局变量可以在脚本的任何地方使用和可见.即是说,如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变. 2.常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和incl

js函数内变量的作用域分析

 这篇文章主要介绍了js函数内变量的作用域分析,以实例形式简单分析了js函数的变量调用顺序,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例分析了js函数内变量的作用域.分享给大家供大家参考.具体分析如下: 先看一个函数实例: 代码如下: <html> <head> </head> <body> <script type="text/javascript"> var a = 5; var c = 3; functi

java中关于变量的作用域的问题

问题描述 java中关于变量的作用域的问题 在java中局部变量,实例变量,类变量的作用域都分别是什么呢? 解决方案 在java中: 局部变量:一般指的就是方法内部的变量,它的作用域范围就是定义方法体内部,也就是两个花括号之间,出了这个范围就访问不到了.实例变量实例变量也叫_非静态成员变量_,它的作用范围是在当前类创建的实例对象范围,如果当前实例对象被销毁,它也将随之消失,各个实例对象之间互不影响.类变量类变量也叫_静态成员变量_,顾名思义类变量,它就是跟当前类有关系的,它是属于当前类的.cla

彻底理解js中this

相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不

java中的变量的作用域问题

问题描述 java中的变量的作用域问题 新人初学java,在变量的作用域这里卡了下 我知道全局变量和局部变量,但是如果我在main的开头就申明了一个变量,那这个变量应该是全局变量吧,下面所有的方法都可以调用这些变量,但是如果我在main函数中间申明了一个变量,那这个变量算什么?还算是全局变量吗?是不是只有后面的方法才能使用它,而在他之前的就不能用? 还有一个问题: File tmp; while(!list.isempty()){ tmp = (File)list.removeFirst ...

JS中使用变量保存arguments对象的方法_javascript技巧

迭代器(iterator)是一个可以顺序存取数据集合的对象.其一个典型的API是next方法.该方法获得序列中的下一个值. 迭代器示例 题目:希望编写一个便利的函数,它可以接收任意数量的参数,并为这些值建立一个迭代器. 测试代码好下: var it=values(,,,,,,,,); it.next();// it.next();// it.next();// 分析:由于values函数需要接收任意多个参数,这里就需要用到上一节讲到的构建可变参数的函数的方法.然后里面的迭代器对象来遍历argum

简单谈谈javascript中的变量、作用域和内存问题_javascript技巧

[变量] [1]定义:可变的量,相当于给一个不定的数据起了一个外号.变量是存储信息的容器. [2]特性:js中的变量是松散类型的,可以保存任何类型的数据.它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. [3]变量声明:变量可以在声明时赋值,但不能有其他操作,如+=.-=等 var a = 2;//是正确的 var a += 2;//是错误的 var a = 2++;//是错误的,++只能用于变量

深入理解JS中的substr和substring_javascript技巧

substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, length ]) 参数 stringvar 必选项.要提取子字符串的字符串文字或 String 对象. start 必选项.所需的子字符串的起始位置.字符串中的第一个字符的索引为 0. length 可选项.在返回的子字符串中应包括的字符个数. 说明 如果 length 为 0 或负数,将返回一个空字符串.如果没有指定该参数,则子字符串将延续到 stringvar 的最后. 示