JS 数据类型

在介绍这三个之间的差别之前, 先来看一下JS  的数据类型。

在 Java ,C这样的语言中, 使用一个变量之前,需要先定义这个变量并指定它的数据类型,是整型,字符串型,....

但是在js 中定义变量统一使用 var , 或者不使用var 也可以使用。

那么js 中是否有数据类型的概念呢? 当然有, 使用 typeof 就可以判断这个变量的数据类型:

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<script>
s = "This is Test";
alert(typeof(s));
</script>
</HEAD> <BODY> </BODY>
</HTML>

以上例子弹出的值是 "string", 由此可以看出, js 也是有数据类型的。

js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。

原始类型和引用类型有什么区别?引用的概念其他语言的引用很类似, 就是一个地址。看一下这个例子就知道了。

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<script>
var obj = new Object();
var objCopy = obj;
obj.att1 = "obj attribute";
alert(objCopy.att1);
</script>
</HEAD> <BODY> </BODY>
</HTML>

别忽略了object 类型的这种特性哦, 这个是会被经常误用的地方。类似上面的obj的改变引起了objCopy的改变。

除了以上5 中类型之外, 还有一种 “function”的类型。

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<script>
function test()
{
alert("hello");
}
alert(typeof(test));
</script>
</HEAD> <BODY> </BODY>
</HTML>

undefined 和 null, NaN 的区别

有了上面的介绍,就可以很容易把undefined 和其他的两个区分开来。

undefined判断的是变量的类型,而其他两个判断是变量的值。

undefined可以用来表示以下的状况

1. 表示一个未声明的变量,

2. 已声明但没有赋值的变量,

3. 一个并不存在的对象属性

null 是一种特殊的object ,表示无值;

NaN是一种特殊的number ,表示无值;

比较符(== 或 ===)

使用 == ,如果两边的类型不同, js 引擎会先把它们转成相同的类型在进行值的比较;

使用 ===, 则不会进行类型转换,类型不同,肯定不相等。

实例

有了以上的知识,再来看下面一些有意思却容易混淆的例子应该就很清晰了:

<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<script>
var s;
alert(s==undefined); //true
alert(s===undefined); //true alert(s==null); //true
alert(s===null); //false alert(null==undefined); //true
alert(null===undefined); //false
</script>
</HEAD> <BODY> </BODY>
</HTML>

把var s 改成 var s = null 再看看效果~~

一般情况下, 对js 某个变量s 判空习惯使用 if(s!=null) , 如果s 没有定义的话,就会报undefined的js 错误, 所以完整的判空可以使用如下方式:

if(typeof(s)!="undefined"&&s!=null)

Javascript 中的非空判断 undefined,null, NaN的区别的更多相关文章

  1. (转载)Javascript 中的非空判断 undefined,null, NaN的区别

    原文地址:https://blog.csdn.net/oscar999/article/details/9353713 在介绍这三个之间的差别之前, 先来看一下JS  的数据类型. 在 Java ,C ...

  2. js判断undefined类型,undefined,null,NaN的区别

    js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined   所以自作聪明判断       ...

  3. [经验] 关于 Java 中的非空判断

    在写项目的时候, 遇到一个问题 假设有一个控制层接口为: @ResponseBody @RequestMapping(value = "test", method = Reques ...

  4. JavaScript 中undefined,null,NaN的区别

    1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;va ...

  5. js中undefined,null,NaN的区别

    1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;va ...

  6. C/C++ 指针的非空判断

    一定要分得清楚C和C++的“空指针常量”不是一样的.C标准不保证NULL等于0,所以做指针非空判断时,应该用if(p != NULL):因为“上下文转换到bool值”的统一性,C++就应该用if(p) ...

  7. List和String的非空判断

    1.如果想判断list是否为空,可以这么判断: if(null == list || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmp ...

  8. throw关键字和Objects非空判断_requireNonNull方法

    作用: 可以使用throw关键字在指定的方法中抛出指定的异常 使用格式: throw new xxxException("异常产生的原因") 注意: 1.throw关键字必须写在方 ...

  9. 异常分类和异常的产生过程解析和Objects非空判断

    java.lang.Throwable类是java语言中所有错误的异常的超类. Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeExeption:运行期异常,j ...

随机推荐

  1. NET Core,你必须了解无处不在的“依赖注入”

    NET Core,你必须了解无处不在的“依赖注入” ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middle ...

  2. utf8字节

    <pre name="code" class="html">[root@wx03 0724]# perl a1.pl 112 [root@wx03 ...

  3. cocos2d-x游戏开发系列教程-超级玛丽08-消息机制

    在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...

  4. Putty远程登录VMware虚拟机Linux(Ubuntu12.04)

    为了不至于来回在Win7和Ubuntu12.04之间来回切换,在Win7下使用VMware9.0安装了Ubuntu12.04. 首先下载Vmware9.0虚拟机软件,下载地址为:VMware-work ...

  5. css网页自适应-2

    昨天中午Google进行了一次在线讲座,讲述自适应网页设计的概念和方法,维护同一个网页代码,即可使网站在多种浏览设备(从桌面电脑显示器到智能手机或其他移动产品设备)上具有更好的阅读体验,这里我将该讲座 ...

  6. rollback的作用

    #pragma mark - 以队列的形式添加 // 以队列的形式添加数据FMDB比较常用的添加方式 // FMDB不支持多个线程同时操作,所以一般以串行的方式实现相关操作 - (IBAction)i ...

  7. [置顶] 我的GB28181标准开发里程碑——基于eXosip的IPC端与SPVMN注册成功

    昨天编译搭建好eXosip的开发环境后,今天完成了SIP注册功能,里程碑一战啊!加油加油,成功就在眼前! 今天基于eXosip做了一个IPC客户端,成功与公安部的SPVMN视频监控联网调测软件自测工具 ...

  8. windows phone:使用sqlite-net

    继上篇文章后,这里简单介绍下sqlite-net的使用(示例不为作者所写,摘自于:https://github.com/peterhuene/sqlite-net) Please consult th ...

  9. Linux多线程编程(一)---多线程基本编程

    线程概念 线程是指运行中的程序的调度单位.一个线程指的是进程中一个单一顺序的控制流,也被称为轻量级线程.它是系统独立调度和分配的基本单位.同一进程中的多个线程将共享该系统中的全部系统资源,比如文件描述 ...

  10. [week2]每周总结与工作计划

    这周总体过的还不错吧,没有颓废多少 = =... 果然有计划能够让效率提高,看了每周做个计划是很有益的. 这周前几天照例很忙,课比较多.后面几天每天早上都会安排下今天的计划,这样做起事来就有条理性多了 ...