资讯专栏INFORMATION COLUMN

《javascript高级程序设计》笔记:undefined和null

codeKK / 1338人阅读

摘要:表示没有对象,即该处不应该有值。典型用法是作为函数的参数,表示该函数的参数不是对象。作为对象原型链的终点。表示缺少值,就是此处应该有一个值,但是还没有定义。

undefined 和 null 的简单介绍

undefined 和 null 都是简单数据类型,且对应的我数据类型下有且仅有一个值,分别为undefined和null;

《javascript高级程序设计》书中这样描述:

在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined;
从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因;

JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN

Number(undefined)
// NaN

Number(null)
// 0
目前的用法

null和undefined在实际使用中基本是同义的,只有一些细微的差别。

null表示"没有对象",即该处不应该有值。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。

Object.getPrototypeOf(Object.prototype)
// null

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。

var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
o.p // undefined

var x = f();
x // undefined
如何区分为定义和未初始化
var age;

alert(age); // "undefined"
alert(msg); // 报错:age is not defined

alert(typeof age); // undefined
alert(typeof msg); // undefined

困惑:对未初始化的变量执行 typeof 操作符会返回 undefined 值,而对未声明 的变量执行 typeof 操作符同样也会返回 undefined 值。我们应该如何区分?

// 判断某个变量x是否声明
try{
    x in window;
    alert(true);
    // ...
} catch(e) {
    alert(false);
    // ...
}

参考:阮一峰 undefined与null的区别

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84745.html

相关文章

  • javascript高级程序设计笔记:关系运算符与相等运算符

    摘要:要比较相等性之前,不能将和转换成其他任何值。如果有一个操作数是,则相等操作符返回,而不相等操作符返回。重要提示即使两个操作数都是,相等操作符也返回因为按照规则,不等于。 关系运算符 关系运算符有小于()、小于等于(=)四种,它们都返回一个布尔值 《javascript高级程序设计》书中的规则是这样描述运算规则: (1)如果两个操作数都是数值,则执行数值比较; (2)如果两个操作数都是字...

    Blackjun 评论0 收藏0
  • JavaScript高级程序设计笔记:基本概念

    摘要:一写在前面最近重读高级程序设计,总结下来,查漏补缺。但这种影响是单向的修改命名参数不会改变中对应的值。这是因为对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。实际改变会同步,改变也会同步 一、写在前面 最近重读《JavaScript高级程序设计》,总结下来,查漏补缺。 二、JS简介 2.1 JS组成 ECMAscript:以ECMA-262为基础的语言,由...

    ygyooo 评论0 收藏0
  • JavaScript高级程序设计学习笔记三(基本语法)

    摘要:数据类型中有种简单数据类型也称为基本数据类型和。在中非空字符串,非零数字,任意对象,都被认为。而空字符串,和,,认为是。用于表示整数和浮点数。标识符由数字字母下划线美元符组成,但首字母不能是数字。变量方法对象命名推荐驼峰法。 JavaScript语法 一.语法简介 因为JavaScript语法和Java等语法非常类似。所以只是简单介绍一下。 大小写 JavaScript是大小写敏感的语...

    Mike617 评论0 收藏0
  • 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    摘要:写在开头本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。可移步笔者的文章中替换方式参考文档高级程序设计作者以乐之名本文原创,有不当的地方欢迎指出。 showImg(https://segmentfault.com/img/bVblGMc?w=600&h=400); 写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。...

    iOS122 评论0 收藏0
  • JavaScript高级程序设计笔记:基本概念(三)

    摘要:数据类型中有种简单数据类型也称为基本数据类型和。因为特殊值被认为是一个空的对象引用。尽管和有这样的关系,但它们的用途完全不同。这样做不仅可以体现作为空对象指针的惯例,而且也有助于进一步区分和。 数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string。 typeof typeof null会返回o...

    jas0n 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<