前言
本文作者分享三道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:
Array.isArray()是JavaScript中内置对象Array自带的isArray方法,这是ES6新添的方法,十分的好用console.log(Array.isArray(new Array(5))); // Expected output: true
通过原型链:
Array.prototype.isPrototypeOf(obj)检查Array.prototype是否存在于对象obj的原型链中判断
obj.__proto__ === Array.prototype;是否为true,和1类似,也是通过原型链的方式来判断,这里注意直接用__proto__并不推荐,因为它是一个非标准的属性。
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 Null为Object这个不合理的结果。拓展:
在JavaScript中:
- 定义
var a未赋值的情况下输出a为undefined- 定义
var a = null的情况下输出a为Null- 未定义
var a的情况下输出a为报错a is not defined
总结
本文分享的三道八股,可以帮助第一次刷到的人,认识一下对应的知识点,之前刷过的或者接触过的大佬,可以借此复习一下知识点,如果对你有帮助的话,可以点个赞呀!!
🌇结尾
本文部分内容参考程序员鱼皮的:面试鸭
感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是3Katrina,一个热爱编程的大三学生
(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)
作者:3Katrina
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。