Javascript 如何使用Object.prototype使用扩展方法检查空值

Javascript 如何使用Object.prototype使用扩展方法检查空值,javascript,Javascript,在很多地方,我需要检查JavaScript变量是null还是空字符串,因此我编写了一个扩展方法,如下所示: Object.prototype.IsNullOrEmptyString = function() { return (this == null || (typeof this === "string" && this.length == 0)); } 然后我这样称呼它: var someVariable = null; if (someVariable.IsN

在很多地方,我需要检查JavaScript变量是null还是空字符串,因此我编写了一个扩展方法,如下所示:

Object.prototype.IsNullOrEmptyString = function()
{
    return (this == null || (typeof this === "string" && this.length == 0));
}
然后我这样称呼它:

var someVariable = null;

if (someVariable.IsNullOrEmptyString())
    alert("do something");
但这不起作用,因为在if语句的计算点上,someVariable为null。我一直得到的错误是“someVariable为null”

您可以在这里看到它:(在Firefox中运行并注意错误控制台)


还有什么方法可以做我想做的,同时让一个扩展方法检查null和其他内容吗?

null
没有任何属性或方法。您必须创建一个函数,并传递变量,以便对其进行测试。注意:要测试变量是否真的是空字符串,建议使用
==“
”*

*关于
=
==
。以下比较是正确的:

null == undefined
"" == 0;
"" == false
"" == 

因为变量不是对象,所以它不起作用。这样做

Object.prototype.IsNullOrEmptyString = function(obj)
{
    return (obj == null || (typeof this === "string" && this.length == 0));
}


if(Object.IsNullOrEmptyString(null))
  alert('yes');

只需进行函数调用

function IsEmptyString(value)
{
    return (value == null ||
            value === "");
}
这是一个


编辑:将(==undefined and==null)合并为(==null)

我有一个全局帮助函数来实现这一点。我只是希望使用一种扩展方法。哦,好吧。@sohimsso1970我回到我的第一句话:
null没有任何属性或方法
+1用于包含未定义的。我没有想到这一点,但我也需要在这个场景中检查它。简而言之,检查
value===undefined | | value===null
完全等同于检查
value==null
(使用非严格的等于运算符),此表单隐式检查
null
undefined
,由于
undefined
不是诸如
null
之类的关键字,并且在ES3实现中,它的值可以被覆盖。@sohimsso1970测试
typeof Test==“undefined”
而不是
Test==undefined
<代码>未定义的可以被任意值覆盖。您可能希望将其设置为
对象
,而不是
对象。原型
(或
对象。IsNullOrEmptyString
将不存在)。lol sidicious,为了扩展对象,您需要使用prototype@SenadMeškin,
Object.IsNullOrEmptyString
之所以有效,是因为当您扩展
Object.prototype
时,您扩展了所有对象,包括函数对象,作为
对象
构造函数,这在本例中根本不可取,例如
函数.IsNullOrEmpty
({}).IsNullOrEmpty
document.IsNullOrEmpty
等将被扩展。正如@Sidnicious所建议的,如果您想在
对象
上使用函数,只需在其上创建一个属性(
Object.isNullOrEmpty=function(){/*…*/};
),您肯定想在
对象
,而不是
对象.prototype
)上设置方法,因为您不希望每个对象都有该方法。它甚至会出现在
中,因为在每个对象实例上执行的
循环中,它可能会造成很大的损害。扩展对象不是一个好主意。它应该被认为是“最终的”
function IsEmptyString(value)
{
    return (value == null ||
            value === "");
}