js数据类型判断

1. typeof 可以对基本类型做出准确的判断,但对于引用类型力不从心

var num = 1
var str = 'str'
var arr = [1,2,3]
var boo = true
var obj = new Object()
var und = undefined
var objNull = null
const sym = Symbol()
function foo() {}
console.log('***********typeof*********');

console.log(typeof num)
console.log(typeof str)
console.log(typeof arr)
console.log(typeof boo)
console.log(typeof obj)
console.log(typeof und)
console.log(typeof objNull)
console.log(typeof sym)
console.log(typeof foo)
// number
// string
// object
// boolean
// object
// undefined
// object
// symbol
// function

2 .instanceof 判断对象和构造函数在原型链上是否有关系,如果有关系,返回真,否则返回假

console.log('***********instanceof*********');

console.log( num instanceof Array)
console.log( str instanceof Array) 
console.log( arr instanceof Array)
console.log( boo instanceof Array)
console.log( obj instanceof Array)
console.log( und instanceof Array)
console.log( objNull instanceof Array)
console.log( sym instanceof Array)
console.log( foo instanceof Array)
// false
// false
// true
// false
// false
// false
// false
// false
// false

3. constructor 查看对象对应的构造函数

constructor 对于null和undefined会报错

console.log('***********constructor*********');
console.log( num.constructor == Array)
console.log( str.constructor == Array) 
console.log( arr.constructor ==  Array)
console.log( boo.constructor ==  Array)
console.log( obj.constructor ==  Array)
// console.log( und.constructor ==  Array)//报错
// console.log( objNull.constructor ==  Array)//报错
console.log( sym.constructor ==  Array)
console.log( foo.constructor ==  Array)
// false
// false
// true
// false
// false
// false
// false
// false

4. Object.prototype.toString

toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型,更严格的讲,是 toString运行时this指向的对象类型, 返回的类型

console.log('***********Object.prototype.toString*********');
console.log(Object.prototype.toString (num))
console.log(Object.prototype.toString (str))
console.log(Object.prototype.toString (arr))
console.log(Object.prototype.toString (boo))
console.log(Object.prototype.toString (obj))
console.log(Object.prototype.toString (und))
console.log(Object.prototype.toString (objNull))
console.log(Object.prototype.toString (sym))
console.log(Object.prototype.toString (foo))
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
console.log('***********Object.prototype.toString.call()*********');
console.log(Object.prototype.toString.call (num))
console.log(Object.prototype.toString.call (str))
console.log(Object.prototype.toString.call (arr))
console.log(Object.prototype.toString.call (boo))
console.log(Object.prototype.toString.call (obj))
console.log(Object.prototype.toString.call (und))
console.log(Object.prototype.toString.call (objNull))
console.log(Object.prototype.toString.call (sym))
console.log(Object.prototype.toString.call (foo))
// [object Number]
// [object String]
// [object Array]
// [object Boolean]
// [object Object]
// [object Undefined]
// [object Null]
// [object Symbol]
// [object Function]

  Reprint please specify: 云深不知处 js数据类型判断

 Previous
强制类型转换 强制类型转换
JavaScript中的强制类型转换总是返回标量值,如数字,字符串,布尔值,不会返回对象和函数。 也可以这样子类区分:类型转换发生在静态类型转换的编译阶段,而强制类型转换发生在动态语言的运行时。 然而在JavaScript中统称为强制类型转
2019-02-17
Next 
HTTP的三次握手 HTTP的三次握手
client — SYN = 1, Seq = X —-> server client <— SYN = 1, ACK = X + 1 ,Seq = Y —- ser
2019-02-16
  TOC