请移步访问:http://leeyee.github.io/blog/2013/05/07/javascript-null-undefined/
var param; | var param = undefined; | var param = null; | 未定义 | |
param == 'undefined' | false | false | false | 报错。param未定义 |
param === 'undefined' | false | false | false | 报错。param未定义 |
param == undefined | true | true | true | 报错。param未定义 |
param === undefined | true | true | false | 报错。param未定义 |
typeof param | undefined | undefined | object | undefined |
typeof param == 'undefined' | true | true | false | true |
typeof param === 'undefined' | true | true | false | true |
typeof param == undefined | false | false | false | false |
typeof param === undefined | false | false | false | false |
if(param) | false | false | false | 报错。param未定义 |
if(typeof param) | true | true | true | true |
结论:
- null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
- 声明但不赋值,默认为undefined;即 var param ; 等价于 var param = undefined;
- undefined不同于未定义,但typeof并不区分undefined和未定义;因此typeof(undefined)与typeof(未定义变量)的输出值都是undefined;
- 当函数无明确返回值时,默认返回的为undefined;如:( function foo(){ })
- typeof(null)返回的是对象,但null == undefined返回true;这是由于值undefined其实是从值null派生过来的,因此ECMAScript将其定义为一样的;
- null 虽然 == undefined,但undefined是声明了变量但未对其初始化时赋值时赋予该变量的值,null则表示尚未存在的对象;
- 只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null;
- 函数或方法返回值为对象时,如果该返回的对象找不到则该函数或方法通常返回的是null;
- typeof方法返回的是变量的引用类型的字符名称。因此if(typeof param)为永真。如果要判断引用类型,可以使用instanceof,但此时变量的声明应使用new关键字创建。
测试代码:
function test1() { var param;// 定义但未赋值 console.log("1. var param; --> ", "定义但未赋值"); console.log(" 1.1. param == 'undefined' <--> ", param == 'undefined'); // false console.log(" 1.2. param == undefined <--> ", param == undefined);// true console.log(" 1.1.1 param === 'undefined' <--> ", param === 'undefined'); // false console.log(" 1.2.1 param === undefined <--> ", param === undefined);// true console.log(" 1.3. typeof param <--> ", typeof param); // undefined console.log(" 1.4. typeof param == 'undefined' <--> ", typeof param == 'undefined'); //true console.log(" 1.5. typeof param == undefined <--> ", typeof param == undefined);//false console.log(" 1.4.1 typeof param === 'undefined' <--> ", typeof param === 'undefined'); //true console.log(" 1.5.1 typeof param === undefined <--> ", typeof param === undefined);//false param ? console.log(" 1.6. if(param) return true") : console .log(" 1.6. if(param) return false"); typeof param ? console.log(" 1.7. if(typeof param) return true") : console.log(" 1.7. if(typeof param) return false"); } function test2() { console.log("2. param未定义"); console.log(" 2.1. param == 'undefined' <--> ", "报错,param未定义"); console.log(" 2.2. param == undefined <--> ", "报错,param未定义"); console.log(" 2.3. typeof param <--> ", typeof param); // undefined console.log(" 2.4. typeof param == 'undefined' <--> ", typeof param == "undefined");//true console.log(" 2.5. typeof param == undefined <--> ", typeof param == undefined);//false console.log(" 2.4.1 typeof param === 'undefined' <--> ", typeof param === 'undefined');//true console.log(" 2.5.1 typeof param === undefined <--> ", typeof param === undefined);//false console.log(" 2.6. if(param) 由于param未定义,因此报错"); typeof param ? console.log(" 2.7. if(typeof param) return true") : console.log(" 2.8. if(typeof param) return false"); } function test3() { var param = null; console.log("3. var param = null; -->", "定义默认为null"); console.log(" 3.1. param == 'undefined' <--> ", param == 'undefined'); // false console.log(" 3.2. param == undefined <--> ", param == undefined);// true console.log(" 3.1.1 param === 'undefined' <--> ", param === 'undefined'); // false console.log(" 3.2.1 param === undefined <--> ", param === undefined);// true console.log(" 3.3. typeof param <--> ", typeof param); // object console.log(" 3.4. typeof param == 'undefined' <--> ", typeof param == 'undefined'); //false console.log(" 3.5. typeof param == undefined <--> ", typeof param == undefined);//false console.log(" 3.4.1 typeof param === 'undefined' <--> ", typeof param === 'undefined'); //false console.log(" 3.5.1 typeof param === undefined <--> ", typeof param === undefined);//false param ? console.log(" 3.6. if(param) return true") : console .log(" 3.6. if(param) return false"); typeof param ? console.log(" 3.7. if(typeof param) return true") : console.log(" 3.7. if(typeof param) return false"); } function test4() { var param = undefined; console.log("4. var param = undefined; -->", "定义默认为undefined"); console.log(" 4.1. param == 'undefined' <--> ", param == 'undefined'); // false console.log(" 4.2. param == undefined <--> ", param == undefined);// true console.log(" 4.3. typeof param <--> ", typeof param); // undefined console.log(" 4.4. typeof param == 'undefined' <--> ", typeof param == 'undefined'); //true console.log(" 4.5. typeof param == undefined <--> ", typeof param == undefined);//false param ? console.log(" 4.6. if(param) return true") : console .log(" 4.6. if(param) return false"); typeof param ? console.log(" 4.7. if(typeof param) return true") : console.log(" 4.7. if(typeof param) return false"); } test1(); test2(); test3(); test4();
测试结果:
1. var param; --> 定义但未赋值 1.1. param == 'undefined' <--> false 1.2. param == undefined <--> true 1.1.1 param === 'undefined' <--> false 1.2.1 param === undefined <--> true 1.3. typeof param <--> undefined 1.4. typeof param == 'undefined' <--> true 1.5. typeof param == undefined <--> false 1.4.1 typeof param === 'undefined' <--> true 1.5.1 typeof param === undefined <--> false 1.6. if(param) return false 1.7. if(typeof param) return true 2. param未定义 2.1. param == 'undefined' <--> 报错,param未定义 2.2. param == undefined <--> 报错,param未定义 2.3. typeof param <--> undefined 2.4. typeof param == 'undefined' <--> true 2.5. typeof param == undefined <--> false 2.4.1 typeof param === 'undefined' <--> true 2.5.1 typeof param === undefined <--> false 2.6. if(param) 由于param未定义,因此报错 2.7. if(typeof param) return true 3. var param = null; -->定义默认为null 3.1. param == 'undefined' <--> false 3.2. param == undefined <--> true 3.1.1 param === 'undefined' <--> false 3.2.1 param === undefined <--> false 3.3. typeof param <--> object 3.4. typeof param == 'undefined' <--> false 3.5. typeof param == undefined <--> false 3.4.1 typeof param === 'undefined' <--> false 3.5.1 typeof param === undefined <--> false 3.6. if(param) return false 3.7. if(typeof param) return true 4. var param = undefined; -->定义默认为undefined 4.1. param == 'undefined' <--> false 4.2. param == undefined <--> true 4.3. typeof param <--> undefined 4.4. typeof param == 'undefined' <--> true 4.5. typeof param == undefined <--> false 4.6. if(param) return false 4.7. if(typeof param) return true
相关推荐
JavaScript中的Null和Undefined是原始数据类型,它们在数据类型的层级中占据着特殊的位置。在JavaScript的编程实践中,这两个数据类型虽然相似但又有着细微的差别。了解Null和Undefined有助于我们更加准确地编写代码...
JavaScript中Null与Undefined的区别解析主要涉及两种特殊数据类型:Null和Undefined。这两种类型是JavaScript中的原始类型,它们经常会使开发者混淆,尤其是在变量的赋值和比较操作中。本文将通过多个实例,详细解释...
此外,根据ECMAScript 262规范规定,null和undefined之间在进行相等性测试时会返回true。这意味着在JavaScript中,当你使用相等操作符(==)来比较null和undefined时,结果是相等的: ```javascript alert(null == ...
在JavaScript编程语言中,null和undefined是两个非常基础且常用的特殊值。尽管它们看起来相似,但它们在JavaScript中有着本质上的区别和各自的应用场景。本文将详细探讨这两个特殊值的相同点和不同点,以及在实际...
- **类型**:ECMAscript支持多种数据类型,包括字符串、数值、布尔值、数组、对象和特殊值如`null`和`undefined`。 - **关键字和保留字**:关键字如`var`、`function`、`if`等用于构建程序逻辑;保留字如`abstract`...
在JavaScript编程语言中,null和undefined是两个基本且重要的数据类型,它们通常用来表示无值或者缺值的状态。但是在很多情况下,新手开发者和一些经验丰富的开发者都会对这两个值之间的区别感到困惑。本文将深入...
ECMAScript 2020,也被称为ES2020或ECMAScript 11,是ECMAScript规范的最新版本,旨在定义JavaScript编程语言的标准。ECMAScript是由Ecma国际标准化组织制定的一个标准,它对JavaScript进行规范化,确保在不同平台和...
ECMAScript 中的原始类型包括数字、字符串、布尔值、null、undefined 等。原始类型是不能被改变的值,具有不可变性。 2.6.1. typeof 运算符 typeof 运算符用于检测一个值的类型,例如数字、字符串、布尔值等。...
它有七种基本数据类型(Undefined、Null、Boolean、Number、BigInt、String和Symbol)以及一种复杂数据类型(Object)。 2. **变量声明**:使用`var`、`let`和`const`关键字声明变量。`var`在函数作用域内,而`let`...
ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和 String。还有 1种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。ECMAScript 不支持任何创建...
1. **原始值类型**:Undefined、Null、Boolean、String、Number是原始值类型,它们是不可变的,不具有对象的特性,比如没有原型和构造函数。例如: - `undefined`:未定义的值,通常用于变量声明但未赋值的情况。 ...
JavaScript中的基本类型值是ECMAScript语言规范中的核心概念,它们包括Undefined、Null、Boolean、Number和String五种。这些类型被认为是简单数据类型,因为它们的值直接存储在栈内存中,而不是像复杂数据类型(如...
4. 数据模型:标准定义了ECMAScript中的数据模型,包括对象的定义、数据类型(如Undefined、Null、Booleans、Numbers、Strings、Namespaces等)、类和简单实例、未实例化的函数、方法闭包、日期、正则表达式以及包和...
ECMAScript是JavaScript的标准化规范,而Array类型是ECMAScript中最常用的引用类型之一。在JavaScript中,Array类型是不同于其他编程语言中数组的,其特性包括可以保存任意类型的数据以及动态调整长度。 首先,...
在JavaScript编程语言中,Undefined和null是两个基本数据类型,虽然它们听起来很相似,但实际上它们有着明显的区别。Undefined类型表示一个变量已声明但未被初始化,而null类型则表示一个空对象指针。接下来,我将...
本书分为13章,较为系统地介绍ECMAScript语言,内容包括变量与常量、表达式和运算符、字符串、数字和符号、数组和类型化数组、对象、函数、集合和映射、迭代器和生成器、Promise对象与异步函数、代理、类和模块,...
ECMAScript是区分大小写的,这意味着`variable`和`Variable`被视为两个不同的标识符。 ##### 1.2 弱类型 ECMAScript是一种弱类型的语言,变量没有固定的数据类型。例如: ```javascript var background = "white"; ...
ECMAScript 手册是关于ECMAScript语言的权威指南,该语言规范是JavaScript和JScript等编程语言的基础。ECMAScript由Brendan Eich在Netscape公司发明,并首次应用于Navigator 2.0浏览器,后来被所有Netscape和从...