深入理解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验证整数加保留小数点的简单实例
Dec 02 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
详解JavaScript ES6中的模板字符串
Jul 28 Javascript
DeviceOne 让你一见钟情的App快速开发平台
Feb 17 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
微信小程序  audio音频播放详解及实例
Nov 02 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
vue 页面加载进度条组件实例
Feb 05 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
Aug 25 Javascript
node+multer实现图片上传的示例代码
Feb 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 cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php获取汉字首字母的函数
2013/11/07 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php检测文本的编码
2015/07/26 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
分享Python字符串关键点
2015/12/13 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
python 中如何获取列表的索引
2019/07/02 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
企业活动策划方案
2014/06/02 职场文书
学习张林森心得体会
2014/09/10 职场文书
情人节活动总结范文
2015/02/05 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
Django中session进行权限管理的使用
2021/07/09 Python