一. null VS undefined VS NaN

1. null

定义:null是特殊的object,是空对象,没有任何属性和方法。

  1. document.writeln(typeof null); // object

值得注意的是: 对象模型中,所有的对象都是Object或其子类的实例,但null对象例外:

  1. document.writeln(null instanceof Object); // false

2. undefined

定义:undefined是undefined类型的值,未定义的值和定义未赋值的为undefined;无法使用 for/in 循环来枚举 undefined 属性,也不能用 delete 运算符来删除它。

作用

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

  1. var i;
  2. i // undefined
  3.  
  4. function f(x){console.log(x)}
  5. f() // undefined
  6.  
  7. var o = new Object();
  8. o.p // undefined
  9.  
  10. var x = f();
  11. x // undefined

提示:只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。
注释:null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。

3. NaN

NaN是一种特殊的number

  1. document.writeln(typeof NaN); // number

他们三个的值

1. null“等值(==)”于undefined,但不“全等值(===)”于undefined,NaN与任何值都不相等,与自己也不相等:

  1. document.writeln(null == undefined); // true
  2. document.writeln(null === undefined); // false
  3. document.writeln(NaN == null); // false
  4. document.writeln(NaN == undefined); // false
  5. document.writeln(NaN == NaN); // false

2.  null与undefined都可以转换成false,但不等值于false:

  1. document.writeln(!null, !undefined); // true true
  2. document.writeln(undefined == false); // false
  3. document.writeln(null == false); // false

3. null不等于0,但是计算中null会当做成0来处理;undefined计算的结果是NaN;NaN计算的结果也是NaN:

  1. alert(null == 0); // false
  2. alert(123 + null); // 123
  3. alert(123 * null); // 0
  4. alert(123 / null); // Infinity
  5. alert(123 + undefined); // NaN
  6. alert(123 * undefined); // NaN
  7. alert(123 / undefined); // NaN
  8. alert(123 + NaN); // NaN
  9. alert(123 * NaN); // NaN
  10. alert(123 / NaN); // NaN

二. empty VS isset

1. empty

检查一个变量是否为空(变量不存在或它的值等同于FALSE),如果变量不存在empty()不会产生警告。

2. isset

检测变量是否设置,并且不是 NULL

  1. <?php
  2.  
  3. $var = '';
  4.  
  5. // 结果为 TRUE,所以后边的文本将被打印出来。
  6. if (isset($var)) {
  7. echo "This var is set so I will print.";
  8. }
  9.  
  10. // 在后边的例子中,我们将使用 var_dump 输出 isset() 的返回值。
  11. // the return value of isset().
  12.  
  13. $a = "test";
  14. $b = "anothertest";
  15.  
  16. var_dump(isset($a)); // TRUE
  17. var_dump(isset($a, $b)); // TRUE
  18.  
  19. unset ($a);
  20.  
  21. var_dump(isset($a)); // FALSE
  22. var_dump(isset($a, $b)); // FALSE
  23.  
  24. $foo = NULL;
  25. var_dump(isset($foo)); // FALSE
  26.  
  27. ?>

empty与isset,null与undefined的更多相关文章

  1. null、 is_null() 、empty() 、isset() PHP 判断变量是否为空

    PHP中,在判断变量是否为空的时候,总会纠结应该选用哪个函数,下面列取常用的多种情况,其中1/3经过我的验证,其它来自网络,验证后使用... 使用 PHP 函数对变量 $x 进行比较 表达式 gett ...

  2. empty、isset、is_null的比较

    直接上代码 <?php $a=0; $b='0'; $c=0.0; $d=''; $e=NULL; $f=array(); $g='\0'; $h=' ';//space $i=true; $j ...

  3. empty、isset、is

    直接上代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <?php $a=0; $b='0'; $c=0.0; ...

  4. [PHP源码阅读]empty和isset函数

    近日被问到PHP中empty和isset函数时怎么判断变量的,刚开始我是一脸懵逼的,因为我自己也只是一知半解,为了弄懂其真正的原理,赶紧翻开源码研究研究.经过分析可发现两个函数调用的都是同一个函数,因 ...

  5. empty和isset函数详解

    1.empty函数 用途:检测变量是否为空 若变量不存在则返回 TRUE 若变量存在且其值为"".0."0".NULL..FALSE.array().var $ ...

  6. php empty()和isset()的区别

    在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问 ...

  7. php部分---include()与require()的区别、empty()与isset is_null的区别与用法详解

    include()与require()的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间.他们最根本的区别在于错误处理的方式不一样. 1.处理错误的方式: require()一个文件存在错误的话 ...

  8. php中empty(), is_null(), isset()函数区别

    empty(), is_null(), isset()真值表(区别) 我们先来看看这3个函数的功能描述 www.111cn.net isset 判断变量是否已存在,如果变量存在则返回 TRUE,否则返 ...

  9. php中empty()、isset()、is_null()和变量本身的布尔判断区别(转)

    在php脚本中,我们经常要去判断一个变量是否已定义或者是否为空,就需要用到这些函数empty().isset().is_null()和其本身作为参数,下面小段程序做个简要比较 <?php//预定 ...

随机推荐

  1. Spring 中面向AOP之一系列做法

    Spring的AOP实现是通过集成AspectJ框架实现的. 想必这句话大家都知道了吧,不知道也没关系,最起码你现在知道了. 四种实现方案,接下来我们一一去揭开它的神秘的面纱....... 第一种(伪 ...

  2. HTML标签参考(二)

    一些重要的标签 • ol li  <ol><li></li></ol>这是一组标签,它们二者都是成对出现的,每一个标签单独出现都是没有意义的事情. 这一 ...

  3. 【c++错误】类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)

    今天编写类的程序的时候不小心把类后的分号忘写了,就出现上面的错误提示. 顺便复习下类的正确格式: class 类名 { public: //习惯上将公有类型放在前面,便于阅读 ……(外部接口) pro ...

  4. Spring Boot—14JdbcTemplate

    pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  5. AI在网管中的运用

  6. Java 实验案例(多态)

    实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...

  7. 【Android】RxJava的使用(四)线程控制 —— Scheduler

    并没有关系的图 前言 经过前几篇的介绍,对RxJava对模式有了一定的理解:由Observable发起事件,经过中间的处理后由Observer消费.(对RxJava还不了解的可以出门左拐)之前的代码中 ...

  8. MyBatis -01- 初识 MyBatis + MyBatis 环境搭建

    MyBatis -01- 初识 MyBatis + MyBatis 环境搭建 MyBatis 本是 apache 的一个开源项目 iBatis(iBATIS = "internet" ...

  9. 【转】SSL协议详解

    作者:朱祁林 出处:http://zhuqil.cnblogs.com 原文链接 背景介绍    最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. ...

  10. git repo代码部署策略及工具

    一般在项目或者产品开发流程中,先是开发人员在本地做好开发及测试,其中可能包含很多用于测试用的目录以及源代码文件,在部署前往往会有一个build过程.web项目最终build产生出优化生产环境下减少ht ...