Object.prototype函数来测试它是否定义/非null?

sta*_*eth 3 javascript

我只是想避免这种情况

if(typeof myObject !== 'undefined' && myObject !== null)
{
   //safely use myObject  
}
Run Code Online (Sandbox Code Playgroud)

所以我试过这个

Object.prototype.doesExist = function() {
    return (typeof this !== "undefined" && this !== null);
}
Run Code Online (Sandbox Code Playgroud)

其次是

if(myObject.doesExist()){
   //safely use myObject
}
Run Code Online (Sandbox Code Playgroud)

但结果当然是myObject没有定义

它理解为什么这不起作用,但有没有人想出一个更好的方法来完成我正在寻找的东西?

Ste*_*ley 5

如注释中所述,null或者undefined不是a的实例Object,因此它们不会继承Object的原型.

解决方案1:使用静态Object方法,这是一个功能性但不是很干净的解决方案,类似于您尝试的方法.

Object.exists = function(obj) {
    return typeof obj !== "undefined" && obj !== null;
}

if (Object.exists(myObject)) {
   // safely use myObject
}
Run Code Online (Sandbox Code Playgroud)

方案2:使用instanceof如果你知道你期待什么类型的对象.如果要在if语句中访问ClassName的接口,建议使用此方法.

if (myObject instanceof ClassName) {
    // safely use myObject
}
Run Code Online (Sandbox Code Playgroud)

例子:

function A() {}
var a = new A(), b;

> a instanceof A
true
> a instanceof Object
true

> b instanceof A
false
> b instanceof Object
false

> null instanceof A
false
> null instanceof Object
false

> undefined instanceof A
false
> undefined instanceof Object
false
Run Code Online (Sandbox Code Playgroud)

我认为这可以处理你的用例

  • @Mathletics - 对于 0、空字符串等值,这将评估为“false”。 (2认同)