关于 Undefined 与 Null

LogicAdventurer
• 阅读 716

Undefined

Undefined 类型只有一个值,即 undefined,未定义的值。在声明一个变量后,未初始化的变量会自动被赋予 undefined 的值。

这种原始状态会在以下 4 种场景中出现:

  1. 声明一个变量,但是没有赋值

    var foo;
    console.log(foo); // undefined
  2. 访问对象上不存在的属性或者未定义的变量

    var obj = {};
    console.log(obj.name); // undefined
  3. 函数定义了形参,但没有传递实参

    //函数定义了形参 a
    function fn(a) {
      console.log(a); // undefined
    }
    fn(); //未传递实参
  4. typeof 未初始化和未声明的值

    var message; // 这个变量声明之后默认取得了 undefined 值
    console.log(typeof message); // undefined
    console.log(typeof age); // undefined

Null

Null 类型是第二个只有一个值的数据类型,即 null。从逻辑角度来看,null 值表示一个空对象指针,要意在保存对象的变量还没有真正保存对象。而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因。

var data = null;
console.log(data); // "null"
console.log(typeof data); // "object"
  1. 手动设置变量的值或者对象某一个属性值为 null。(在作用域中不再需要使用某个对象时,把 null 赋值给那个变量解除引用,以释放内存)
  2. 在 DOM 元素获取中,如果没有获取到指定的元素对象,结果一般是 null
var d = document.getElementById("d");
console.log(d); // 当没有 id 为 "d" 的标签时返回 null

区别

用一句话总结两者的区别就是:

  • undefined 表示一个变量自然的、最原始的状态值。(值不存在)
  • null 则表示一个变量被人为的设置为空对象,而不是原始状态。(值存在但是为空,没有意义)

所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可。

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
4年前
sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
<divclass"htmledit\_views"id"content\_views"<p&nbsp;函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。</p<preclass"has"name"code"<codeclass"hljssql"<
菜园前端 菜园前端
2年前
JavaScript的基础语法介绍
原文链接:变量声明在JavaScript程序中,使用一个变量之前应当先声明。变量是使用关键字var来声明的。javascriptvarivarsum20如果未在var声明语句中给变量赋予初始值,那么虽然声明了这个变量,但在给它传入一个值之前,它的初始值就是
虾米大王 虾米大王
3年前
java代码020
code020.jsp解决中文乱码name参数的值为:sex参数的值为:
待兔 待兔
5年前
[Dart]Dart语言之旅<二>:变量
变量以下是创建变量并为其分配值的示例:varname'Bob';变量是引用。名为name的变量包含对值为“Bob”的String类型的对象的引用。默认值未初始化的变量的初始值为null。即使是数字类型的变量,初始值也为null,因为数字也是对象。intlineCount;assert(lineCountnull)
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
4年前
JavaScript学习小结
JavaScirpt变量可用来保存两种类型值:基本类型值,引用类型值基本类型值:Undefined,Null,Boolean,Number,String基本类型及引用类型值特点:1.基本类型值在内存中占据固定大小的空间,被保存在栈内存中;2.从一个变量向另一个变量复制基本类型值,会创建这个值的一个副本;
Stella981 Stella981
4年前
Javascript中的基本数据类型
Undefined在var或者let中声明了变量但没有赋值时,这个变量的值就是undefined.使用typeof关键字检测未声明变量的类型为undefined.Nullnull表示一个空对象指针,所以用typeof检测null时,会返回objectundefine派生自null,
Easter79 Easter79
4年前
Swift3.0 类和结构体的选择
结构体实例总是通过值传递,类实例总是通过引用传递先说说值类型和引用类型的区别值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝在Swift中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。引用类型在被赋予到一个变量、常
Stella981 Stella981
4年前
Lua程序设计
        Lua中全局变量不需要声明。只需将一个值赋予一个全局变量就可以创建一个全局变量了。在Lua中访问一个未初始化的变量不会引发错误,访问结果是一个特殊的nil值。例如:print(b)   nilb  10 print(b)  10通常没有必要删除一个全局变量。如果一个变量只有较短的生存周期,那