第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

如何判斷JavaScript的數(shù)據(jù)類型?

標(biāo)簽:
JavaScript

本文将讲解我目前所知道的判断JavaScript数据类型的方法。
JavaScript数据类型一共有7种:

  • Undefined

  • Null

  • Boolean

  • String

  • Symbol

  • Number

  • Object

除了Object之外的6种属于原始数据类型。有时,我们还会细分Object的类型,比如ArrayFunctionDateRegExp等。

typeof

typeof可以用来区分除了Null类型以外的原始数据类型对象类型的可以从普通对象里面识别出函数

typeof undefined // "undefined"
typeof null // "object"
typeof 1 // "number"
typeof "1" // "string"
typeof Symbol() // "symbol"
typeof function() {} // "function"
typeof {} // "object"

问题一:typeof不能识别null,如何识别null
答案:如果想要判断是否为null,可以直接使用===全等运算符来判断(或者使用下面的Object.prototype.toString方法):

let a = null
a === null // true

问题二:typeof作用于未定义的变量,会报错吗?
答案:不会报错,返回"undefined"

typeof randomVariable // "undefined"

问题三:typeof Number(1)的返回值是什么?
答案:"number"。注意NumberString作为普通函数调用的时候,是把参数转化为相应的原始数据类型,也就是类似于做一个强制类型转换的操作,而不是默认当做构造函数调用。注意和Array区分,Array(...)等价于new Array(...)

typeof Number(1) // "number"
typeof String("1") // "string"

Array(1, 2, 3)
// 等价于
new Array(1, 2, 3)

问题四:typeof new Number(1)的返回值是什么?
答案:"object"

typeof new Number(1) // "object"
typeof new String(1) // "object"

instanceof

instanceof不能用于判断原始数据类型的数据:

3 instanceof Number // false
'3' instanceof String // false
true instanceof Boolean // false

instanceof可以用来判断对象的类型:

var date = new Date()
date instanceof Date // true

var number = new Number()
number instanceof Number // true

var string = new String()
string instanceof String // true

需要注意的是,instanceof的结果并不一定是可靠的,因为在ECMAScript7规范中可以通过自定义Symbol.hasInstance方法来覆盖默认行为。详情参见

由上面的示例可知,该方法没有办法区分数字类型和数字对象类型,同理还有字符串类型和字符串对象类型、布尔类型和布尔对象类型。

另外,ECMAScript7规范定义了符号Symbol.toStringTag,你可以通过这个符号自定义Object.prototype.toString方法的行为:

'use strict'
var number = new Number(3)
number[Symbol.toStringTag] = 'Custom'
Object.prototype.toString.call(number).slice(8, -1) // "Custom"

function a () {}
a[Symbol.toStringTag] = 'Custom'
Object.prototype.toString.call(a).slice(8, -1) // "Custom"

var array = []
array[Symbol.toStringTag] = 'Custom'
Object.prototype.toString.call(array).slice(8, -1) // "Custom"

因为Object.prototype.toString方法可以通过Symbol.toStringTag属性来覆盖默认行为,所以使用这个方法来判断数据类型也不一定是可靠的。

Array.isArray

Array.isArray(value)可以用来判断value是否是数组:

Array.isArray([]) // true
Array.isArray({}) // false
(function () {console.log(Array.isArray(arguments))}()) // false

总结

本文讲解了我目前所知道的判断JavaScript数据类型的方法,希望大家能有所收获。如果本文有什么错误或者不严谨的地方,欢迎在评论区留言。


原文链接:https://segmentfault.com/a/1190000016561101
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消