深入理解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 相关文章推荐
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
跨域传值即主页面与iframe之间互相传值
Dec 09 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
详解微信小程序——自定义圆形进度条
Dec 29 Javascript
Webpack实现按需打包Lodash的几种方法详解
May 08 Javascript
详解react-router4 异步加载路由两种方法
Sep 12 Javascript
JS数组Object.keys()方法的使用示例
Jun 05 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
Nov 06 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
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打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
2015/01/19 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
pyqt和pyside开发图形化界面
2014/01/22 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python实现的矩阵类实例
2017/08/22 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
高三生物教学反思
2014/01/25 职场文书
商场端午节活动方案
2014/01/29 职场文书
小班教师个人总结
2015/02/05 职场文书
DQL数据查询语句使用示例
2022/12/24 MySQL