【问题标题】:Javascript: how to test an object is an object (and not an array or a string)?Javascript:如何测试对象是对象(而不是数组或字符串)?
【发布时间】:2014-06-10 10:24:25
【问题描述】:

我知道 (a instanceof Array) 但我将如何测试对象?

var c = {};

if ( c instanceof XXXX) {
   // should get thru
}

var s = "abscdef";

if ( s instanceof XXXX) {
   // should not get thru
}

var a = [];

if ( a instanceof XXXX) {
   // should not get thru
}

【问题讨论】:

  • 你到底是什么意思? {} 是一个对象,而不是一个集合。
  • 您的术语很混乱 - c 是 Object,而不是“集合”。
  • 好的,那么抱歉。那么如何检测任何类型的对象呢? (我编辑问题)
  • 与数组相同。 if (c instanceof Object) ...
  • @Pilot 是关于 javascript 的,所以我会拒绝。

标签: javascript collections


【解决方案1】:
function isObject(c) {
  return c instanceof Object 
    && !(c instanceof Array) 
    && !(c instanceof Function)
}

ArrayFunction 检查是必要的,因为 JavaScript 数组也是对象(假设您不希望函数为数组或函数参数返回 true

示例输出:

isObject([])
> false

isObject({})
> true

isObject(1)
> false

isObject('something')
> false

isObject(isObject)
> false

【讨论】:

  • 您也可以添加&& !(c instanceof Function),因为c = function(){}Object AND Function 的一个实例
  • 完美,谢谢@joews!:在行动中看到它的小提琴jsfiddle.net/stephanedeluca/43Jza
【解决方案2】:

我想你的意思是这样的吗?如果我不是很理解这个问题,我很抱歉。

function MyOwnType(name){
    this.name = name
}
var myInstance = new MyOwnType("StackOverflow");
console.log(myInstance instanceof(MyOwnType)) //this evaluates to true
console.log(myInstance instanceof(Array)) //this evaluates to false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多