检查Object.create或literal创建的对象类型的最佳方法是什么,例如以下代码。我想确保函数的参数可以安全使用。也许我不应该检查参数的类型,但检查函数使用的属性是否未定义。但这样做似乎非常繁琐。什么是最好的方法,谢谢。
var base = {
name : "abc"
};
var child = Object.create(base);
do_something = function(o) {
if (typeof(o) === "base") { // will not work
...
}
}
答案 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