`
LeeYee
  • 浏览: 70057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ECMAScript中原始类型Null和Undefined小结

 
阅读更多

请移步访问: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 

 

0
0
分享到:
评论

相关推荐

    JavaScript基本类型值-Undefined、Null、Boolean

    ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。 Undefined Undefined时全局变量的一个属性,它只有一个值即:undefined。当使用var声明变量但未对其初始化时,...

    javaScript的数据类型

    ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和 String。还有 1种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。ECMAScript 不支持任何创建...

    ECMAscript

    ECMAscript基础

    ECMAScript 2018快速入门 高清完整PDF

    本书分为13章,较为系统地介绍ECMAScript语言,内容包括变量与常量、表达式和运算符、字符串、数字和符号、数组和类型化数组、对象、函数、集合和映射、迭代器和生成器、Promise对象与异步函数、代理、类和模块,...

    理解Javascript_02_理解undefined和null

    来自普遍的回答: 其实在 ECMAScript 的原始类型中,是有Undefined 和 Null 类型的。 这两种类型都分别对应了属于自己的唯一专用值,即undefined 和 null。 值 undefined 实际上是从值 null 派生来的,因此 ...

    ECMAScript中文最新(ECMA262)

    ECMAScript2021中文最新,ECMAScript2021中文文档,第1-6章,持续更新,喜欢请star。git地址https://github.com/fangniyima/ECMAScript-notes

    js判断undefined类型示例代码

    有六种可能:”number”、”string”、”boolean”、”object”、”function”、”undefined” 3.4 数据类型 ECMAScript中有 5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number 和Stri

    ECMAScript5.1中文版

    js 学习必备。 ECMAScript5.1中文版

    ECMAScript 2020 语言规范(ECMA-262)

    ECMAScript 基于几种原始技术,最著名的是 JavaScript(Netscape)和 JScript(Microsoft)。该语言由Netscape的Brendan Eich发明,并首次出现在该公司的Navigator 2.0浏览器中。它已经出现在Netscape的所有后续...

    Learning ECMAScript 6

    Learning ECMAScript 6 Learning ECMAScript 6 Learning ECMAScript 6 Learning ECMAScript 6

    Javascript中判断一个值是否为undefined的方法详解

    前言 相信大家都知道当声明一个变量,并且没有给赋值的情况下,它的初始值是undefined。但是在javascript中,怎么检查一个值是否为undefined呢?...不过,这个行为在2009年的ECMAScript 5被修复了。 15

    ECMAScript Javascript Promise 详解

    ECMAScript Javascript Promise 详解

    ECMAScript5.1中文版说明

    此标准定义了 ECMAScript 脚本语言。本节包含对 ECMAScript 语言非规范性的概述。

    ecmascript手册

    ecmascript手册,可以通过手册料及基于此规范的语言

    1一面 1:ES 基础知识点与高频考题解析.md

    `typeof xxx`得到的值有以下几种类型:`undefined` `boolean` `number` `string` `object` `function`、`symbol` ,比较简单,不再一一演示了。这里需要注意的有三点: - `typeof null`结果是`object` ,实际这是`...

    ECMAscript 6.0

    ECMAscript 6.0PDF,先说清楚,这是一个需要对js 5.0和用过模块化框架的有一些基础的人,更容易理解

    ECMAScript 6 入门(第三版)

    ECMAScript 6 入门(第三版)

    ECMAScript概述

    ECMAScript语言概述 ECMAScript对象概述(原型链Prototype Chain) ECMA-262主要术语 ECMAScript执行环境(作用域链Scope Chain,闭包机制) ECMAScript函数(new原理) ECMAScript内部属性(参考) ECMAScript执行环境作用...

    ECMAScript 2018快速入门

    ECMAScript 2018快速入门

Global site tag (gtag.js) - Google Analytics