javascript之数据类型的判断

/**
 * @param{*}基本数据类型、引用类型
 * @desc 基本数据类型(原始类型|简单数据类型):number、boolean、null、undefined、string
 *      一种复杂数据类型object。可以用typeof检测 返回字符串
 *       ES6新增的数据类型symbol
 *       ES6新增的数据结构:set、map
 *
 *       使用typeof、instanceof、Object.prototype.toString(o) 分别来检测的区别
 *
 */
	var arr = ['ooo']
	var str = 'ooo'
	var num = 123
	var un = undefined
	var nul = null
	var boo = true
	var obj = { name: 'li' }

1.使用typeof

	console.log(typeof arr)       // object
	console.log(typeof str)      // string
	console.log(typeof num)    // number
	console.log(typeof un)     // undefined
	console.log(typeof nul)  // object
	console.log(typeof boo) // boolean
	console.log(typeof obj) // object

typeof 操作符可以判断一个变量是string、undefined、boolean还是number类型,返回的是字符串。但是无法准确判断一个变量是对象object、array还是null。

2.使用instanceof

	console.log(`${arr instanceof Object}`)        // true
	console.log(`${arr instanceof Array}`)        // true
	
	console.log(`${str instanceof Object}`)     // false
	console.log(`${str instanceof String}`)    // false
	
	console.log(`${obj instanceof Object}`)   // true

instanceof可以检测一个变量是不是引用类型的实例,所有引用类型都是object实例。上例的字符串不能被检测,因为字符串是基本数据类型,instanceof无法检测基本数据类型。

可以使用Array.isArray(arr)方法检测某数组。
console.log(${Array.isArray(arr)}) // true

3.使用Object.prototype.toString.call()

	console.log(Object.prototype.toString.call(arr))     // [object Array]
	console.log(Object.prototype.toString.call(str))     // [object String]
	console.log(Object.prototype.toString.call(num))    // [object Number]
	console.log(Object.prototype.toString.call(un))     // [object Undefined]
	console.log(Object.prototype.toString.call(nul))    // [object Null]
	console.log(Object.prototype.toString.call(boo))    // [object Boolean]
	console.log(Object.prototype.toString.call(obj))    // [object Object]

使用Object.prototype.toString.call() 可以区分出检测值是null 、array还是object构造函数。返回的值是字符串类型"[object Object]",第二个类型名称首字母大写。而typeof返回的是字符串全小写"object"。

null、undefined

console.log(!null && typeof null === 'object')
console.log(!undefined && typeof undefined === 'undefined')

NaN

typeof NaN === 'number'   // true
NaN === NaN    // false
isNaN(NaN)   // true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值