资讯专栏INFORMATION COLUMN

【前端工程师手册】null和undefined到底是什么关系?

_Dreams / 3297人阅读

它们是什么 undefined

undefined代表了一个并不存在的值,很多情况都会产生undefined,比如:

没有返回语句的函数运行结束,就会返回undefined

访问数组中不存在的下标和对象不存在的属性

void运算符会返回undefined

undefined是一个全局定义的变量:

    undefined in window  // true
null

空引用或者空对象,下面这些情况都会用到null:

试图获取一个不存在的元素返回一个null值

通过分配null可以手动的释放对象,便于垃圾回收

它们哪儿相同 undefined和null都不能被设置属性或者取属性
undefined.name  // Uncaught TypeError: Cannot read property "name" of undefined
null.name   // Uncaught TypeError: Cannot read property "name" of null
在条件上下文中,都会被计算成false
if(!undefined){
    console.log("show undefined");
}
if(!null) {
    console.log("show null")
}
// show undefined
// show null
它们哪儿不同 它们是两个不同的类型

我们都知道JavaScript里面基本类型有:string,number,boolean,null,undefined,所以null和undefined是两个完全不同的类型

Object.prototype.toString.call(null)    // [object Null]
Object.prototype.toString.call(undefined)   //  [object Undefined]
typeof操作返回值不同

先看现象:

typeof undefined    // undefined
typeof null     // object

其实typeof null返回object是一个遗存的bug,因为JavaScript值存在32位的bit中,1-3位是类型标识,而且前三位为000的是object,恰好null表示机器码空指针,在大多数平台上为0x00,所以typeof null就会被误以为是object,而且这个bug到现在也没fix,据说是因为历史代码太多所以被委员会拒绝。

参考资料

typeof-null

探索JavaScript中Null和Undefined的深渊

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

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

相关文章

  • 前端程师手册】说清楚JavaScript中的相等性判断

    摘要:如果没有传入的话如果是类型,则取否则,取这个方法大致和一样,除了以下返回返回参考知乎中和区别是什么全面解析中的数据类型与类型转换规范 有哪些判断相等性的方法 JavaScript现在提供了三种方法来判断相等性: ===,三个等号即严格相等 ==,两个等号即宽松相等 Object.is(),ES6中用来判断相等的方法 判断相等性的细节 ===(严格相等) 被比较的两个数不会进行类型转...

    crossoverJie 评论0 收藏0
  • 前端程师手册】JavaScript之this的笔记

    摘要:函数别名是全局对象的属性显式绑定一个小栗子和第一个参数是一个对象,它们会把这个对象绑定到,接着在调用函数时指定这个。 今天总结一下this。 误解 熟悉Java或者其他语言的同学看到this会想当然的认为this指向函数本身,然而在JavaScript中并不是这样子。 function func(){ console.log(this.index) } func.index ...

    roland_reed 评论0 收藏0
  • 前端程师手册】JavaScript之原型

    摘要:又是一个比较重要的知识点原型。且和指向了同一个对象。可以是使用做什么创建对象的数据共享把一些实例共享的属性和方法放在原型上,节约空间。基于原型链的委托继承这个原型继承的关系可以用图来表示参考资料深入之从原型到原型链强大的原型和原型链 又是一个比较重要的知识点——原型(prototype)。 一个例子 function F() {} var f = new F() F.prototype...

    Darkgel 评论0 收藏0
  • 从规范去看Function.prototype.apply到底怎么工作的?

    摘要:如果是或者,会将作为值。否则,被调用的函数,进行转换后,作为值。又怎么操作这个很神奇。能转换它的参数为到总共个整数中的一个,这个函数遵循以下规则。不断加入新方法的规范也是这个初衷。 showImg(https://segmentfault.com/img/remote/1460000012563719); 今天看element-react源码的时候,又看到了这张似曾相识却又异常陌生的老...

    tanglijun 评论0 收藏0
  • JS前端面试总结

    摘要:春招季如何横扫面试核心考点基础版前端面试之路二基础整理的继承和的继承有什么区别的继承时通过或构造函数机制来实现。作用创建私有变量,减少全局变量,防止变量名污染。异步浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。 春招季如何横扫 Javascript 面试核心考点(基础版)?前端面试之路二(javaScript基础整理) ES5的继承和ES6的继承有什么区别 ES5的继承时通过...

    ThinkSNS 评论0 收藏0

发表评论

0条评论

_Dreams

|高级讲师

TA的文章

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