如何"键入检查"功能参数?

时间:2014-03-14 06:26:45

标签: javascript typeof

检查Object.create或literal创建的对象类型的最佳方法是什么,例如以下代码。我想确保函数的参数可以安全使用。也许我不应该检查参数的类型,但检查函数使用的属性是否未定义。但这样做似乎非常繁琐。什么是最好的方法,谢谢。

var base = {
    name : "abc"
};

var child = Object.create(base);
do_something = function(o) {
    if (typeof(o) === "base") { // will not work
      ...
    }
}

2 个答案:

答案 0 :(得分:2)

typeof只能返回基类型,如object,strirng,number,undefined。

typeof o === "object"

如果继承自基类,则可以使用

instanceof。例如MDN

function Base() {
  this.name = "abc";
}
var child = new Base();
var a = child instanceof Base;  //true

实例需要格式<object> insanceof <function>


使用isPrototypeOf()

继承时,您可以使用Object.create()
var base = {name; "abc"};
var child = Object.create(base);

base.isPrototypeOf(child);

可在此处阅读更多信息:Mozilla Developer Network: isPrototypeOf


要检查是否存在属性o非空的对象name,您可以执行

if(typeof o === "object" && typeof o.name !== "undefined")

如果name不符合falsy

0值,则可以使用速记
if(o && o.name)

答案 1 :(得分:1)

在您的代码库中,变量不是类型,如果您想要基类型,则在JavaScript函数中将其视为类,然后创建一个函数并对其进行初始化,然后使用instanceof来为您提供基础。

使用instanceof

尝试这种方式
var base = function(){
    name : "abc"
};

var o = new base();
alert(o instanceof base); // true

Here is JsFiddle