每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day9

tags: ItIron2021 Javascript

前言

昨天我们简单讨论了恼人的强制转型问题,今天让我们来面对最後一个型别相关的题目吧!
别担心,今天也是很简单的题目!

本日题目与解释

请说明你要如何检查一个变数的型别

老样子,这种时候就需要防雷图啦!

thinking-day9

也许你看到这题目会觉得...这什麽烂东西? 不就用typeof就好了吗?

说得没错! typeof确实是个好帮手!

const name = 'Danny'
const age = 30

console.log(typeof name) // string
console.log(typeof age) // number

那麽...如果是这样的玩意呢?

console.log(typeof []) // ???
console.log(typeof {}) // ???

我想你应该猜到今天究竟要探讨什麽了,上述程序码的输出结果毫不意外的是object。那我们先简化一下问题吧!

你要如何判断一个变数不是阵列?

首先,在js中除了基本型别以外,实际上全都是物件,所以typeof就出局啦! 不过还是有一些方法可以协助你判断的,我们一个一个来看吧!

  • 方法一: isArray

是的,若原生的javascript就有方法替你判别,那你又何苦自己刻一个函数呢! 不要重复造轮子是个蛮不错的准则,Array的原型下有个isArray的方法可以协助你辨别阵列。

console.log(Array.isArray(10)) // false
console.log(Array.isArray('Danny')) // false
console.log(Array.isArray([])) // true
console.log(Array.isArray({})) // false
console.log(Array.isArray(null)) // false
console.log(Array.isArray(undefined)) // false
  • 方法二: toString

我们在昨天的文章讲过,在许多资料型别的原型下都挂着toString方法,但都有所不同,其中Object.toString会提供我们更完整的资讯,所以罗! 最终的万用杀招就是把挂在Object底下的方法拿来使用! 同样以上方的题目作为例子(若你对於call还不够熟练也没关系,这系列文章在之後还是会提到的)

console.log(Object.prototype.toString.call([])) // [object Array]
console.log(Object.prototype.toString.call({})) // [object Object]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]

这麽一来就可以清楚地辨别所有的型别罗!

本日核心观念与总结

核心观念

资料型别

总结

  • typeof虽然可以辨别部分的型别,但碰到非基本型别就无法了
  • 可以善用Object.prototype.toString.call来进一步的判断资料型别

本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!


<<:  Day 9 - 条件,重复,回圈与互动 - 加入互动,随机性与状态

>>:  【Day 11】分类(Classification)(下)

Javascript 取得现在的年月日时分秒

var oDate = new Date(); var year = oDate.getFullYe...

Day2 工业控制网路 vs IT 资讯网路

工业控制网路 vs IT 资讯网路 管理目标 工业控制网路的设备需要高可用性,因为工厂设备若停摆,...

DAY3 圣杯布局 - 三个栏的C位争夺战(上)

圣杯和双飞翼,是布局PC常见的方法。上下有header,footer,中间三栏center,left...

Day11 远端共同协作 - 使用 GitHub

大家好我是乌木白,今天来向大家介绍GitHub,我自己很喜欢的一个可以做很多功能的网站!! 什麽是...

小白签到: 纪录python学习day 1

#背景: 有理工宅的身形但目前尚无无程序内涵的python初心者,本科系跟理工完全无关的非理工科系毕...