一. typeof操作符
typeof操作符用于返回正在使用值的类型
typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."以及'symbol'
null,array,object返回的都是‘object’
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
typeof使用场景
(1)、判断某个值是否已经定义
// 判断 if (typeof bbb === 'undefined') { console.log('变量未定义'); }
(2)、判断是Array还是Object或者null(也可以使用instanceof进行判断)
let getDataType = function(o){ if(o===null){ return 'null'; } else if(typeof o == 'object'){ if( typeof o.length == 'number' ){ return 'Array'; }else{ return 'Object'; } }else{ return 'param is no object type'; }
(3)、判断是否是复杂值
因为复杂值往往返回object
,当然有个例外就是原始值里面的null
也返回object
,然后function
作为Object
的实例也是复杂值。
// 判断是否时复杂值(对象值) function isObject (m) { return (typeof m === 'function' || (typeof m === 'object' && m !== null)); }
二. instanceof操作符
通过使用instanceof
操作符,可以确定一个对象是否是特定构造函数的实例,返回true
或false
。
instanceof
只适用于构造函数创建返回的复杂对象和实例。
任何时间判断一个对象(复杂值)是否是Object
的实例时,它都将返回true
,因为所有对象都继承自Object()
构造函数。
例如:以下例子,判断得出对象‘oSon’
的实例是‘oFather’的实例
let oFather = function () { this.firstName = 'mazey'; }; // 实例 let oSon = new oFather(); console.log(oSon instanceof oFather); // true
instanceof使用场景
(1)、判断是Array还是Object或者null
let getDataType = function(o){ if(o===null){ return 'null'; } if(o instanceof Array){ return 'Array' }else if( o instanceof Object ){ return 'Object'; }else{ return 'param is no object type'; } }
(2)、判断在一个继承关系中实例是否属于它的父类。
// 继承 let oFather = function () {}; let nFather = function () {}; nFather.prototype = new oFather(); nFather.construction = nFather; let nSon = new nFather(); console.log(nSon instanceof nFather); // true console.log(nSon instanceof oFather); // true
二.hasOwnProperty方法
hasOwnProperty()
方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。
var o = new Object(); o.prop = 'exists'; function changeO() { o.newprop = o.prop; delete o.prop; } o.hasOwnProperty('prop'); // true changeO(); o.hasOwnProperty('prop'); // false
参考文章:https://www.cnblogs.com/mazey/p/7965733.html