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


Posted in Javascript onMarch 04, 2014

1、Javascript变量作用域

javascript中,变量主要分为局部变量和全局变量两种,对应的作用域也是局部作用域和全局作用域。

1 局部变量和作用域
局部变量一般在函数体内部声明使用:

function func(){
  var i=12;//局部变量
  ......
}

局部变量的作用域在声明这个变量的函数体范围内使用。
局部变量的声明周期从函数被调用执行开始初始化,在函数调用执行完毕之后被销毁。

2、全局变量和作用域

全局变量一般在函数体外面声明:

var i=12;//全局变量
function func(){
  ......
}

还有一种没有声明而直接使用的变量,默认为全局变量:

function func(){
  i=12;//没有被声明(使用var 关键字声明),默认为全局变量
}

全局变量在当前页面中所有的脚本和方法中都可以使用,作用域为当前页面脚本中。
全局变量的声明周期在变量被初始化时被创建,在当前页面关闭的时候被销毁。

2、typeof关键字

typeof关键字主要用来检测变量的数据类型,JavaScript中主要的数据类型有string、number、Boolean、object等

console.log(typeof 'str');//string
console.log(typeof 23);//number
console.log(typeof false);//boolean
console.log(typeof [1,3,12]);//object
console.log(typeof {name:'jack',age:12});//object
console.log(typeof new Date());//object

注意: js中的数组、json对象都是object数据类型的

3、null和undefined

null和undefined在JavaScript中经常出现,表示一个变量的值为空或者是一个变量未被定义。在表示值的时候,都可以表示为空值,但是在数据类型方面还是不一样。

console.log(typeof null);//object
var persion = null;
console.log(persion);//null

console.log(typeof undefined);//undefined
var persion2;
console.log(persion2);//undefined

null的数据类型为object,undefined的数据类型就是undefined。
变量声明,值为null,变量值为null;变量只声明,没有赋值,值为undefined。
再看一组对比:

console.log(null==undefined);//true 值相等
console.log(null===undefined);//false  类型不相等

这就可以看出来,null和undefined的表示值的时候,都表示空;null的数据类型为object,undefined的数据类型就是undefined。只声明而没有初始化的值都是undefined。

下面是补充

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

Javascript 相关文章推荐
JS 非图片动态loading效果实现代码
Apr 09 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
Apr 20 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
Jul 10 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
Feb 07 Javascript
Vue form 表单提交+ajax异步请求+分页效果
Apr 22 Javascript
小程序云开发初探(小结)
Oct 24 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
Apr 17 Javascript
vue视频播放插件vue-video-player的具体使用方法
Nov 08 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
Oct 18 Javascript
css+js实现部分区域高亮可编辑遮罩层
Mar 04 #Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 #Javascript
js判断url是否有效的两种方法
Mar 04 #Javascript
js 判断js函数、变量是否存在的简单示例代码
Mar 04 #Javascript
js 事件截取enter按键页面提交事件示例代码
Mar 04 #Javascript
js判断页面中是否有指定控件的简单实例
Mar 04 #Javascript
js实现文本框中焦点在最后位置
Mar 04 #Javascript
You might like
新版PHP将向Java靠拢
2006/10/09 PHP
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
Angular异步变同步处理方法
2018/08/13 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
js验证身份证号码记录的方法
2019/04/26 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
python中星号变量的几种特殊用法
2016/09/07 Python
Python中的__slots__示例详解
2017/07/06 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
计算机实训报告范文
2014/11/05 职场文书
2015年人事科工作总结
2015/04/28 职场文书
公司人力资源管理制度
2015/08/05 职场文书
汽车车尾标语大全
2015/08/11 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python
Flask response响应的具体使用
2021/07/15 Python
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
JS实现九宫格拼图游戏
2022/06/28 Javascript