null、undefined、typeof、instanceof
概述
JavaScript(ECMAScript标准)里共有5种基本类型:
undefined, null, Boolean, Number, String,
和一种复杂类型Object。
JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。
undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。
null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
var oValue;
console.log(oValue == undefined); // true
这段代码显示为true,代表oVlaue的值即为undefined,因为我们没有初始化它。
console.log(null==document.getElementById('notExistNode'));
当页面上不存在id为"notExistNode"的DOM节点时,这段代码显示为"true",因为我们尝试获取一个不存在的对象。
 console.log(typeof undefined) // undefined
 console.log(typeof null) // object
第一行代码很容易理解,undefined的类型为undefined;第二行代码却让人疑惑,为什么null的类型又是Object了 呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。
null
null表示"没有对象",即该处不应该有值。典型用法是:
- 作为函数的参数,表示该函数的参数不是对象。
 - 作为对象原型链的终点。
 
Object.getPrototypeOf(Object.prototype) // null
undefined
undefined表示"缺省值",就是此处应该有一个值,但是还没有定义。典型用法是:
- 变量被声明了,但没有赋值时,就等于undefined。
 - 调用函数时,应该提供的参数没有提供,该参数等于undefined。
 - 对象没有赋值的属性,该属性的值为undefined。
 - 函数没有返回值时,默认返回undefined。
 
typeof
typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。typeof 一般只能返回如下几个结果:number,boolean,string,function,object(null,数组,对象),undefined。我们可以使用 typeof 来获取一个变量是否存在,如:
if(typeof a != "undefined"){alert("ok")}
而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。
instanceof
instanceof 用于判断一个变量是否某个类的实例.
var a=new Array();
alert(a instanceof Array); // true
alert(a instanceof Object); // true
两个结果都为true,因为Array 是 Object 的子类。
function test(){};
var a = new test();
alert(a instanceof test) // true
谈到 instanceof 我们要注意一点,就是 function 的 arguments,我们大家也许都认为 arguments 是一个
Array,但如果使用 instaceof 去测试会发现 arguments 不是一个 Array 对象,尽管看起来很像,但其实它是类数组对象。
null、undefined、typeof、instanceof的更多相关文章
- null和undefined的区别、数组和伪数组的区别
		
null和undefined的区别 undefined: 字面意思是未定义的值,语义是希望表示一个变量最原始的状态,而非人为操作的结果.这种原始状态会在以下四个场景中出现: 声明了一个变量但没有赋值 ...
 - JavaScript处理null、undefined和空值
		
最近一直在写前端,在使用jquery的ajax请求然后处理返回值的时候,经常会遇到返回值为undefined或者"null"的情况,很是头疼,而返回接口是来自于其他公司的,所以这种 ...
 - JavaScript中null和undefined
		
JavaScript的数据类型大体分为两类:原始类型和对象类型.其中,原始类型包括数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null(空)和undefined(未定义), ...
 - 数据类型总结——null和undefined
		
相关文章 简书原文:https://www.jianshu.com/p/c3e252efe848 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...
 - json,js中typeof用法详细介绍及NaN、 null 及 undefined 的区别
		
JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串 在js使用中的一个函 ...
 - (四)JavaScript之[break和continue]与[typeof、null、undefined]
		
7].break和continue /** * JavaScript 的break和continue语句 * break 跳出switch()语句 * break 用于跳出循环 * continue ...
 - indexOf、instanceOf、typeOf、valueOf详解
		
1.indexOf() 该方法用来返回某个指定的字符串值在字符串中首次出现的位置. 语法:indexOf(searchvalue,fromindex);两个参数,参数一表示查询的字符串值,参数二可选表 ...
 - JavaScript中typeof、toString、instanceof、constructor与in
		
JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据. 最新的 ECMAScrip ...
 - 原生JS:delete、in、typeof、instanceof、void详解
		
delete.in.typeof.instanceof.void详解 本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/zh-CN/doc ...
 
随机推荐
- Linux - 操作系统
			
操作系统(科普章节) 目标 了解操作系统及作用 1. 操作系统(Operation System,OS) 操作系统作为接口的示意图 没有安装操作系统的计算机,通常被称为 裸机 如果想在 裸机 上运行自 ...
 - Lozad.js 简单使用
			
GayHub位置:https://github.com/ApoorvSaxena/lozad.js 导入: <script type="text/javascript" sr ...
 - 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯
			
关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...
 - java_16Arrays类
			
1sort():对数组进行升序排列 public static void main(String[] args) { int[] arr= {2,43,6,7}; Arrays.sort(arr); ...
 - Java16-java语法基础——异常
			
Java16-java语法基础——异常 一.异常概念 1.异常:应用程序在运行过程中出现的错误或非正常的意外情况,即虚拟机的通常操作中可能遇到的异常,是一种常见的运行错误. 2.原因:数组越界.空指针 ...
 - Java并发集合(一)-CopyOnWriteArrayList分析与使用
			
CopyOnWriteArrayList分析与使用 原文链接: http://ifeve.com/java-copy-on-write/ 一.Copy-On-Write Copy-On-Write简称 ...
 - dos批处理(bat)运行exe
			
@echo off SETLOCAL ENABLEDELAYEDEXPANSIONREM 延迟环境变量扩展 color E echo operate:1.start启动 2.stop停止 3.exit ...
 - spring boot + spring batch 读数据库文件写入文本文件&读文本文件写入数据库
			
好久没有写博客,换了一家新公司,原来的公司用的是spring,现在这家公司用的是spring boot.然后,项目组布置了一个任务,关于两个数据库之间的表同步,我首先想到的就是spring batch ...
 - git(转载谢谢)
			
Git可视化极简易教程 —— Git GUI使用方法 (新版的git默认已不能自行选择中文语言了) 前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点 ...
 - 第33章:MongoDB-索引--GridFS存储文件
			
①简介 GridFS是MongoDB用来存储大型二进制文件的一种存储机制.特别适合用在存储一些不常改变,但是经常需要连续访问的大文件的情况. ②GridFS的优点 1:能够简化技术栈,如果已经使用了M ...