《JavaScript经典三连问:数据类型、数组判断与Null/Undefined详解》

88 阅读3分钟

前言

本文作者分享三道JavaScript中的三道经典八股,是关于一些数据类型的题目,大家可以参考!


JavaScript有哪些数据类型

这道题,一般人会这样答:

有八种数据类型:

简单数据类型:(Primitive)

  • String
  • Number
  • Boolean
  • Null
  • Undefined
  • Symbol
  • BigInt

复杂数据类型:(Non-Primitive或者Reference)

  • Object

这样答是正确的,没有问题。

但是下面给出一个不一样的,但也是正确的答案,提供给高手提升

严格来说,根据ECMA-262的标准,有七种数据类型:

简单数据类型:(Primitive)

  • String
  • Numeric(Number和BigInt合并了)
  • Boolean
  • Null
  • Undefined
  • Symbol

复杂数据类型:(Non-Primitive或者Reference)

  • Object

其中,Numeric包含子类型Number(IEEE754 双精度浮点数),BigInt(任意精度整数)

当面大厂的时候,你可以这样答给面试官秀一波(只要讲清楚,这是加分项)!中小厂的话就答正常的8种就好了。


如何判断JavaScript变量是数组?

首先我们要明确一点,数组也是对象,然后就可以往这个方向思考,下面是回答:

通过内置Array

  1. Array.isArray()是JavaScript中内置对象Array自带的isArray方法,这是ES6新添的方法,十分的好用

console.log(Array.isArray(new Array(5)));
// Expected output: true

通过原型链

  1. Array.prototype.isPrototypeOf(obj) 检查Array.prototype是否存在于对象obj的原型链中

  2. 判断obj.__proto__ === Array.prototype; 是否为true,和1类似,也是通过原型链的方式来判断,这里注意直接用__proto__并不推荐,因为它是一个非标准的属性。

  3. Object.prototype.toString.call(obj).slice(8,-1) === 'Array'; 这是一个通用的判断类型方式,可以判断各种类型。注意这里的slice的操作,它可以准确的获取到Object.prototype.toString.call(obj)返回的[Objcet Array]这种字符串的后面的内容。


通过Instanceof

判断obj instanceof Array instanceof会查找左边的变量的原型链,如果在原型链上发现了右边,则可以判断。


JavaScript中null和undefined的区别是什么?

  • undefined表示未赋值, 我们可能在不同情况下,定义了一个变量但是由于忘记了,或者变量提升了,导致没有赋上值,此时该变量类型就是Undefined

  • 而Null通常是我们主动给其赋值,我们定义了一个变量并且主动为其设置为Null

在JavaScript中:

typeof undefiened输出的是undefineed

typeof Null输出的是Object

虽然我们在数据类型中将Null定义为简单数据类型(Primitive),但是由于JS的历史遗留问题,导致我们看到typeof NullObject这个不合理的结果。

拓展:

在JavaScript中:

  1. 定义var a未赋值的情况下输出a为undefined
  2. 定义var a = null的情况下输出a为Null
  3. 未定义var a的情况下输出a为报错a is not defined

总结

本文分享的三道八股,可以帮助第一次刷到的人,认识一下对应的知识点,之前刷过的或者接触过的大佬,可以借此复习一下知识点,如果对你有帮助的话,可以点个赞呀!!

🌇结尾

本文部分内容参考程序员鱼皮的:面试鸭

感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是3Katrina,一个热爱编程的大三学生

(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)

作者:3Katrina
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。