We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JavaScript 有 7 种数据类型,其中有 6 种基本数据类型 Number、String、Boolean、Undefined、Null、Symbol(ES6 新增),1 种复杂类型 Object。而其中的 Undefined 和 Null 与其他不同,因为它们只有一个唯一的值,分别是 undefined 和 null。那么它们有啥不同呢?为啥在基本类型里还专门要有这两个?有什么作用呢?且听我细细道来。
Number、String、Boolean、Undefined、Null、Symbol(ES6 新增)
Object
Undefined
Null
undefined
null
从语义上来讲,两者是有明确的区别的:
Undefined 类型只有唯一一个值 undefined,出现 undefined 的情况有以下三种: (1)声明了一个变量但未进行初始化。 比如,函数没有指定返回值默认 return undefined,函数参数没有传参也会默认初始化为 undefined 等。
return undefined
var value; value; // undefined
(2)访问不存在的对象属性也会返回 undefined。
var obj = {value: 1}; obj.content; // undefined delete obj.value; obj.value; // undefined
(3)void 运算符求值,无论后面表达式结果多少,都会返回 undefined。
void
void (1 + 2); // undefined
我们在阻止 a 标签默认跳转时,经常会有 href="javascript:void 0" 这样的写法,这句话中的 javascript: 后面可以带有其他 js 可执行语句,并将后面的执行结果赋予 href,当返回 undefined 的时候就不会跳转。此处利用的也是 void 运算符返回 undefined 的原理。
a
href="javascript:void 0"
javascript:
href
* 注意:虽然可以显式将 undefined 赋值给其他变量,但这样是毫无意义并且不建议的,而且声明但未初始化的变量默认就是 undefined 不需要再赋值。
Null 类型也只有唯一一个值 null ,它代表了一个空对象指针。对象都是引用类型的,变量一般存的都是对象的指针地址值,实际对象内容是存在地址值指向的一块堆内存。而 null 是空指针,没有指向堆内存,表示不存在的对象。以下三种情况会返回 null: (1)当需要返回的变量类型是一个对象,且这个对象找不到时,就会返回 null。
// 比如获取一个不存在的节点就会返回 null document.getElementById('example'); // null
(2)原型链的末端是 null。获取 Object.prototype 的原型返回 null。
Object.prototype
Object.getPrototypeOf(Object.prototype); // null
(3)访问其他自行赋值为 null 的变量。
var content = null; content; // null
* 使用场景:
undefined 的检测方式有两种 (1)对变量使用 typeof ,看是否会返回 "undefined" (字符串形式)。
typeof
"undefined"
var value; typeof value; // "undefined" typeof content; // "undefined",未定义的变量也会返回同样的内容,未变量唯一能做的操作就是使用 typeof,其他都会报错 not defined
(2)与 undefined 进行 === 比较看是否返回 true。
===
true
var value; value === undefined; // true content === undefined; // 报错,Uncaught ReferenceError: content is not defined
其中第二种方法要注意两点:
window.undefined
function test() { var value; var undefined = 'hello'; console.log(value === undefined); // fasle } test(); // 专门声明了个函数是因为全局下声明一个 undefined 变量实际上也是挂在 window 下的,而 window.undefined 已经存在且不允许改写,所以通过函数制造一个局部变量 undefined
改进的方法是直接使用系统返回的 undefined。比如没有 return 的函数、void 0 或者直接 window.undefined 等。
return
void 0
function test() { var value; var undefined = 'hello'; console.log(value === window.undefined); // true console.log(value === void 0); // true } test();
null 的检测方法就直接 === 判断看是否返回 true。注意是严格等于(三等),因为 undefined == null 也会返回 true,而且 null 是保留字所以不用担心 null 能定义变量随便赋值的问题。
undefined == null
var obj = null; obj === null; // true
* 对于 null,使用 typeof 不可行,因为 typeof null 返回的是 "object"。
typeof null
"object"
The text was updated successfully, but these errors were encountered:
No branches or pull requests
JavaScript 有 7 种数据类型,其中有 6 种基本数据类型
Number、String、Boolean、Undefined、Null、Symbol(ES6 新增)
,1 种复杂类型Object
。而其中的Undefined
和Null
与其他不同,因为它们只有一个唯一的值,分别是undefined
和null
。那么它们有啥不同呢?为啥在基本类型里还专门要有这两个?有什么作用呢?且听我细细道来。一、区别
从语义上来讲,两者是有明确的区别的:
undefined
表示一个变量未被初始化。null
表示一个变量初始化了,值被赋予了空值。1. undefined
Undefined
类型只有唯一一个值undefined
,出现undefined
的情况有以下三种:(1)声明了一个变量但未进行初始化。 比如,函数没有指定返回值默认
return undefined
,函数参数没有传参也会默认初始化为undefined
等。(2)访问不存在的对象属性也会返回
undefined
。(3)
void
运算符求值,无论后面表达式结果多少,都会返回undefined
。我们在阻止
a
标签默认跳转时,经常会有href="javascript:void 0"
这样的写法,这句话中的javascript:
后面可以带有其他 js 可执行语句,并将后面的执行结果赋予href
,当返回undefined
的时候就不会跳转。此处利用的也是void
运算符返回undefined
的原理。* 注意:虽然可以显式将
undefined
赋值给其他变量,但这样是毫无意义并且不建议的,而且声明但未初始化的变量默认就是undefined
不需要再赋值。2. null
Null
类型也只有唯一一个值null
,它代表了一个空对象指针。对象都是引用类型的,变量一般存的都是对象的指针地址值,实际对象内容是存在地址值指向的一块堆内存。而null
是空指针,没有指向堆内存,表示不存在的对象。以下三种情况会返回null
:(1)当需要返回的变量类型是一个对象,且这个对象找不到时,就会返回
null
。(2)原型链的末端是
null
。获取Object.prototype
的原型返回null
。(3)访问其他自行赋值为
null
的变量。* 使用场景:
null
。null
以解除引用,注意不会立马回收,只是让其脱离执行环境。js 的垃圾回收机制会自动在下次执行时清除脱离执行环境的变量。二、判断
1. undefined
undefined
的检测方式有两种(1)对变量使用
typeof
,看是否会返回"undefined"
(字符串形式)。(2)与
undefined
进行===
比较看是否返回true
。其中第二种方法要注意两点:
undefined
实际不是值undefined
,而是全局变量window.undefined
(事实上所有直接人为使用undefined
都是访问的window.undefined
),只不过window.undefined
的值刚好是undefined
并且 ES5 之后不再允许改写该属性。undefined
并非保留字,也就意外着实际上我们可以声明一个变量叫undefined
并对他随意赋值,这样用法二就不准确了。改进的方法是直接使用系统返回的
undefined
。比如没有return
的函数、void 0
或者直接window.undefined
等。2. null
null
的检测方法就直接===
判断看是否返回true
。注意是严格等于(三等),因为undefined == null
也会返回true
,而且null
是保留字所以不用担心null
能定义变量随便赋值的问题。* 对于
null
,使用typeof
不可行,因为typeof null
返回的是"object"
。The text was updated successfully, but these errors were encountered: