null与undefined的区别
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的区别的更多相关文章
- 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||
换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...
- tips null和undefined的区别
tips null和undefined的区别 1.undefined类型 undefined类型只有一个值,即特殊的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是und ...
- JS中null与undefined的区别
1.typeof操作符 用来检测变量的数据类型 例:typeof 3.14 //返回number typeof [1,2,3] //返回object 2.null 只有一个值的特殊类型,表示一个空对 ...
- js操作css样式,null和undefined的区别?
1.js操作css的样式 div.style.width="100px"在div标签内我们添加了一个style属性,并设定了width值.这种写法会给标签带来大量的style属性, ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- json,js中typeof用法详细介绍及NaN、 null 及 undefined 的区别
JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串 在js使用中的一个函 ...
- null和undefined的区别、数组和伪数组的区别
null和undefined的区别 undefined: 字面意思是未定义的值,语义是希望表示一个变量最原始的状态,而非人为操作的结果.这种原始状态会在以下四个场景中出现: 声明了一个变量但没有赋值 ...
- 浅谈js中null和undefined的区别
在JS中,null和undefined是经常让人摸不着头脑的东西,尤其是在数据初始化以及处理的过程中,经常稍微不注意,就会让页面在渲染时出现报错,下面来细说下,这两者之间的区别: null 表示一个对 ...
- JavaScript null和undefined的区别
前言 1995年javascript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0 但是,javascript的设 ...
- JavaScript中Null和Undefined的区别
Null: null是js中的关键字,表示空值,null可以看作是object的一个特殊的值,如果一个object值为空,表示这个对象不是有效对象. Undefined: undefined不是js中 ...
随机推荐
- Timer和时间调度
Timer作为JDK提供的util工具,不太适合作为周期调度任务,只适合简单的定时操作(按照一定时间频率出发任务),在java的领域解决方案中,Quartz无疑是翘楚. Timer的调度方法有: pu ...
- PHP(Dom操作的一些基础)
重点!! //DOM操作: // 核心思想:找到元素 操作元素// js找元素 会返回元素对象:// document.getElementById("dd");唯一确定// 返回 ...
- MOT北京站 | 卓越研发之路:亿万级云端架构演进
随着IT行业技术周期的快速迭代,如何在激烈的市场竞争中突出重围成为了不少技术人的困惑.除了要保持良好的技术视野外,多向IT行业精英学习他们分享的实战经验,也可让技术提升,达到事半功倍的效果. MOT北 ...
- awt多线程聊天
public class ChatServer { boolean started = false; ServerSocket serverSocket = null; public void sta ...
- MySQL常用运算符:算术运算符、比较运算符、逻辑运算符
(一) 算术运算符 注意: 在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL. div运算符主要是求两个数相除的商 (二) 比较运算符:比较运算符的运算结果为1(条件为真),0 ...
- websocket作用
1.即时通讯 web即时通讯(网页的QQ,聊天系统等)可以通过websocket实现. 2.轮询 web开发中,有时需要通过轮询(比如时间间隔5秒)去服务器读取数据. 使用HTTP协议向服务器发送re ...
- python中 ImportError: No module XXX的解决办法
python是通过过使用:sys.path来获取模块的路径的,返回的但是一个list 向python模块路径中加入自己的模块:sys.path.append(os.path.abspath('%s.. ...
- java框架之SpringCloud(4)-Ribbon&Feign负载均衡
在上一章节已经学习了 Eureka 的使用,SpringCloud 也提供了基于 Eureka 负载均衡的两种方案:Ribbon 和 Feign. Ribbon负载均衡 介绍 SpringCloud ...
- 160A
#include <stdio.h> int main() { int n; int sum1=0, sum2=0, sum3=0; int x, y, z; scanf("%d ...
- Asp.net Core Mvc EF- Migrations使用
Migragtion的命令,左边是手动命令,右边是代码方式 首先来看命令方式: 创建一个mvc项目,默认已经集成了EF包 创建的项目包含了Microsoft.AspNetCore.Identity.E ...