前面写过jquery对象存在与否的判断。现在谈下Js中判断变量存不存在的问题。

如果这样if(!a),当变量a在js中没有申明时,就会报错,那么接下去的代码将不会被执行。注意,这种判断只要变量申明过,if条件都会通过。比如

<script>
var a = null;
var b; if(!a){
alert("通过")
}
if(!b){
alert("通过")
} </script>

  

以上代码会弹出两个“通过”。说明这种判断只是判别变量是否在js里声明过,而不管其内容时什么。更深层的解释是:undefined和null在if语句中,都会转换为false。

对于没有申明过的变量情况,上述判断不行了。应该用typeof,例子:

<script>
var a = null;
var b; if(typeof a!="undefined"){
alert("is defined")
}else{
alert(" is undefined")
} if(typeof b!="undefined"){
alert("is defined")
}else{
alert(" is undefined")
} if(typeof c!="undefined"){
alert(" is defined")
}else{
alert(" is undefined")
} </script>

  

上述代码的3个弹窗:第1个走if,第2,3都走else。虽然变量c并没有声明,但程序不会报错。而只声明的b,跟c的结果一样。注意,不要试图把3个看上去重复的弹窗封装成1个函数,因为对于变量c这样的传值,都会报错!实际应用中,都是在if里面判断 ,也用不着函数封装。

可能会有好奇,a的typeof 不等于 “undefined”,事实上,typeof null返回“object”:

<script>
var a = null;
alert(typeof a)//object
</script>

typeof返回的字符串有限,null,Array,自定义的对象类型都会返回“object”,如果我们要详细的判断,则需要借助instanceof了。Java中也有此方法,含义是判断某个变量是否属于某个类,是个二元运算符,而typeof是一个一元运算符(变量只有1个)。Instanceof的例子很多,网上搜搜。

Js中判断变量存不存在的问题的更多相关文章

  1. [JS]js中判断变量类型函数typeof的用法汇总[转]

    1.作用: typeof 运算符返回一个用来表示表达式的数据类型的字符串.  可能的字符串有:"number"."string"."boolean&q ...

  2. js 中判断变量是数组还是对象,和判断对象是否为空

    判断是对象还是数组  var ids={ id:'1',num:'2' } if(Array.isArray(ids) == false) {console.log('不是数组,对象') } else ...

  3. js中判断变量不为空或null

    var content=$("content").val(); if(!content){      alert("请输出内容!");      return; ...

  4. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...

  5. 在C中判断变量存储类型(字符常量/数组/动态变量)

    在C中判断变量存储类型(字符常量/数组/动态变量) 在chinaunix论坛上有人问到关于变量存府类型的问题,我觉得可以写个测试代码加深大家对内存使用和布局的理解.下面我把原问题及处理办法贴出来,限供 ...

  6. Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)

    一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...

  7. JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构

    JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...

  8. JS中的变量和输入输出

    一.使用JS的三种方式 1.在HTML标签中,直接内嵌JS(并不提倡使用) <button onclick="alert('点你咋地')">点我</button& ...

  9. js中判断数据类型的四种方法总结

    js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...

随机推荐

  1. js中获取数组中的最大值最小值

    var a=[1,2,3,5]; alert(Math.max.apply(null, a));//最大值 alert(Math.min.apply(null, a));//最小值 多维数组可以这么修 ...

  2. Golang Gin实践 番外 请入门 Makefile

    Golang Gin实践 番外 请入门 Makefile 原文地址:Golang Gin实践 番外 请入门 Makefile 前言 含一定复杂度的软件工程,基本上都是先编译 A,再依赖 B,再编译 C ...

  3. 2013年工作中遇到的20个问题(Bug):161-180

    161.用户表和超级用户分成2个表,很不合理,查询的时候,非常复杂. 162.left join还是很有"市场"的.机构表Org连接User时,想获得user的名字,可能存在,也可 ...

  4. Oracle关联查询-数据类型不一致问题 ORA-01722: 无效数字

    一.存在表A和表B,都包含字段user_no,但数据类型不一致,如下: create table A ( user_id varchar2(20), user_no number(12,0), xxx ...

  5. Visifire实现统计图

    /// <summary> /// 柱形图 /// </summary> public static Chart InitCompareChart(string fundNam ...

  6. Docker--微软dotconf截图

  7. 基于ffmpeg和libvlc的视频剪辑、播放器

    以前研究的时候,写过一个简单的基于VLC的视频播放器.后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放.视频加减速.视频剪切,视频合并(增加中)等功能在一起.有时候 ...

  8. Java 8 类型转换及改进

    为对象的类型做强制转换是一种很不好的设计.但在某些情况下,我们没有其它选择.Java自诞生的那一天起,就具备这样的功能. 我觉得Java 8在一定程度改善了这项古老的技术. 静态转型 Java中最经常 ...

  9. 【函数式】Monads模式初探——Endofunctor

    自函子 自函子(Endofunctor)是一个将范畴映射到自身的函子(A functor that maps a category to itself). 函子是将一个范畴转换到另一个范畴.所以自函子 ...

  10. ural 1005 Stone Pile

    这是道01背包题   ,尽管背包不会  ,可是还是看出来了,递推公式写啊写没写出来,后来一同学说是dfs.这我就開始了A了, 题意是给你n个重量是Wn的石头  让你放到两个包里面.看他们两个差值最小, ...