null和undefined是JavaScript五种基本数据类型中的两种。

null是一个特殊值,但我们常常误解它,有时候我们会把它和另一个数据类型undefined的含义互相混淆。

首先我们来了解一下null这个特殊值会使用在哪些场景以及它代表着什么样的含义?

1.用来初始化一个变量,这个变量可能赋值为一个对象。看着可能有点懵逼,我们结合代码来解析一下。如下:

var person = null;

//也就是说上面那句话可以这么理解:声明一个变量,初始化这个变量的变量值为null,这个变量可能是一个对象。

2.用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象。同样我们结合代码来解析一下。如下:

var person = getPerson();

if ( person !== null){

doSomething();

}

看完代码是不是就一目了然了?原理是为代码做铺垫的,万事离不开代码,所以理解不了原理,我们就结合代码来理解。当你知道代码你却不知道它的原理,当你知道它的原理却不知道它的代码。所以小刘就建议大家用原理+代码来理解和学习。

3.当函数的参数为对象时,用作参数传入。

function doSomething (arg1){

if(arg1===Object ){

arg1=null;

}

}

4.当函数的返回值是对象时,用作返回值传出。

function getPerson(){

if (condition){

return new Person("KobeBryant");

}else{

return null;

}

}

其次,当我们知道了null的使用场景,是不是也得知道在什么样的场景是不应当使用null的呢?

1.不要使用null来检测是否传入了某个参数。

function doSomething (arg1,arg2,arg3,arg4) {

if (arg2 !==null ){

doSomethingElse();

}

}

2.不要用null来检测一个未初始化的变量。

var person;

if ( person !== null){

doSomething();

}

//用来和未初始化的变量作比较

看了上面的讲解,是不是瞬间秒懂并掌握,如果对您有帮助,请点个赞,如果哪里不够好,请互相学习,可以评论下,我们交流下~

我们继续学习,接下来来对undefined这个莫名其妙的东西进行解析。

同null一样,undefined也是一个特殊值,它是那些被声明了却未初始化的变量,即undefined,等待被赋值;

如:var person;

console(person === undefined);//输出为true

虽然这段代码能够正常工作,但是还是避免在代码中使用undefined,因为不管声明了变量还是未声明的变量,typeof运算结果都能返回一个undefined值。

如:var person;

console(typeof person);//输出值为undefined;

console(typeof foo);//输出值为undefined;

在语句中,未声明的变量是会报错的,通过禁用特殊值undefined,可以有效的确保只在一种情况下typeof才会返回undefinedl:那就是当变量未声明时;如果使用了一个可能赋值为一个对象的变量时,则将其赋值为null;将变量初始化赋值为null表明了这个变量的意图,它最终很可能赋值为对象。typeof运算符运算null的类型时返回Object,这样就可以和undefined区分开了。

如:console(null ==undefined);//输出值为true

var person=null;

console(typeof null);//输出值为object
---------------------
作者:111111111188888888
来源:CSDN
原文:https://blog.csdn.net/DreamsTom/article/details/53888829
版权声明:本文为博主原创文章,转载请附上博文链接!

null与undefined的区别的更多相关文章

  1. 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||

    换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...

  2. tips null和undefined的区别

    tips null和undefined的区别 1.undefined类型 undefined类型只有一个值,即特殊的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是und ...

  3. JS中null与undefined的区别

    1.typeof操作符 用来检测变量的数据类型 例:typeof 3.14 //返回number typeof [1,2,3]  //返回object 2.null 只有一个值的特殊类型,表示一个空对 ...

  4. js操作css样式,null和undefined的区别?

    1.js操作css的样式 div.style.width="100px"在div标签内我们添加了一个style属性,并设定了width值.这种写法会给标签带来大量的style属性, ...

  5. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  6. json,js中typeof用法详细介绍及NaN、 null 及 undefined 的区别

    JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串 在js使用中的一个函 ...

  7. null和undefined的区别、数组和伪数组的区别

    null和undefined的区别 undefined: 字面意思是未定义的值,语义是希望表示一个变量最原始的状态,而非人为操作的结果.这种原始状态会在以下四个场景中出现: 声明了一个变量但没有赋值 ...

  8. 浅谈js中null和undefined的区别

    在JS中,null和undefined是经常让人摸不着头脑的东西,尤其是在数据初始化以及处理的过程中,经常稍微不注意,就会让页面在渲染时出现报错,下面来细说下,这两者之间的区别: null 表示一个对 ...

  9. JavaScript null和undefined的区别

    前言 1995年javascript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0 但是,javascript的设 ...

  10. JavaScript中Null和Undefined的区别

    Null: null是js中的关键字,表示空值,null可以看作是object的一个特殊的值,如果一个object值为空,表示这个对象不是有效对象. Undefined: undefined不是js中 ...

随机推荐

  1. 记一次Springboot启动异常

    启动Springboot项目报以下异常: org.springframework.context.ApplicationContextException: Unable to start web se ...

  2. windows下怎样测试oracle安装是否成功以及在oracle中创建用户并赋予用户权限;和[Err] ORA-65096: 公用用户名或角色名无效的解决方案

    测试oracle数据安装是否成功,可按顺序执行以下两个步骤: 测试步骤 1:请执行操作系统级的命令:tnsping orcl 上述命令假定全局数据库名是 orcl.以下是命令执行后的示例(请在cmd命 ...

  3. Java编程基础篇第四章

    循环结构 循环结构的分类 for循环,while循环,do...while()循环 for循环 注意事项: a:判断条件语句无论简单还是复杂结果是boolean类型 b:循环体语句如果是一条语句,大括 ...

  4. 解决mapper绑定异常:nested exception is org.apache.ibatis.binding.BindingException:

    原因: 此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的.由于maven工程在默认情况下src/main/java目录下的mapper文件是不发布到targe ...

  5. 时间选择器(timepicker)

    可以使用Slider拖动选择,也可以使用timespinner改变时间,或者手工填写. 自动判断位置 效果: 源码: <!DOCTYPE html> <html xmlns=&quo ...

  6. maven依赖和传递

    compile (编译范围) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在所有的classpath 中可用,同时它们也会被打包. 只有compile 才 ...

  7. [Day13]static、final、匿名对象、内部类、包、修饰符、代码块

    1.final-最终 (1)final的特点 final修饰类不可以被继承,但是可以继承其他类 final修饰的方法不可以被覆盖,但父类中没有final修饰方法,子类覆盖后可以加final final ...

  8. python 中的__new__与__init__

    在Python中的class中有两个方法__new__与__init__,有什么区别呢? class TestCls(): """docstring for TestCl ...

  9. PTA地下迷宫探索

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

  10. Jedis连接 HelloWorld实现

    建一个Maven项目, pom里加下jedis依赖, <dependency> <groupId>redis.clients</groupId> <artif ...