我如何检查一个变量,如果它是空或未定义,空和未定义之间的区别是什么? ==和===之间的区别是什么(很难搜索谷歌“===”)?


当前回答

差别很细微。

在JavaScript中,未定义的变量是一个从未声明或从未赋值的变量。假设你声明var a;例如,a将是未定义的,因为它从未被赋值。

但如果你赋值a = null;那么a现在是空的。在JavaScript中,null是一个对象(如果你不相信我,可以在JavaScript控制台中试试typeof null),这意味着null是一个值(事实上,甚至undefined也是一个值)。

例子:

var a;
typeof a;     # => "undefined"

a = null;
typeof null;  # => "object"

这在函数参数中很有用。您可能希望有一个默认值,但可以考虑null。在这种情况下,你可以:

function doSomething(first, second, optional) {
    if (typeof optional === "undefined") {
        optional = "three";
    }
    // do something
}

如果你省略了可选参数doSomething(1,2),那么optional将是“three”字符串,但如果你传递doSomething(1,2, null),那么optional将是null。

至于equal ==和strict equal ===比较器,第一个是弱类型,而strict equal也检查值的类型。这意味着0 == "0"将返回true;而0 === "0"将返回false,因为数字不是字符串。

您可以使用这些操作符来检查undefined和null之间的值。例如:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

最后一种情况很有趣,因为它允许你检查一个变量是否为undefined或null。

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true

其他回答

尝试不同的逻辑。你可以使用下面的代码检查所有(4)条件验证,如不null,不空白,不定义,不为零,只使用这个代码(!(!(变量)))在javascript和jquery。

function myFunction() {
var data;  //The Values can be like as null, blank, undefined, zero you can test

if(!(!(data)))
{
   //If data has valid value
    alert("data "+data);
} 
else 
{
    //If data has null, blank, undefined, zero etc.
    alert("data is "+data);
}

}

未定义的

这意味着变量还没有初始化。

例子:

var x;
if(x){ //you can check like this
   //code.
}

等于(= =)

它只检查值是否等于非数据类型。

例子:

var x = true;
var y = new Boolean(true);
x == y ; //returns true

因为它只检查值。

严格等于(= = =)

检查值和数据类型是否相同。

例子:

var x = true;
var y = new Boolean(true);
x===y; //returns false.

因为它检查数据类型x是一个基本类型,y是一个布尔对象。

差别很细微。

在JavaScript中,未定义的变量是一个从未声明或从未赋值的变量。假设你声明var a;例如,a将是未定义的,因为它从未被赋值。

但如果你赋值a = null;那么a现在是空的。在JavaScript中,null是一个对象(如果你不相信我,可以在JavaScript控制台中试试typeof null),这意味着null是一个值(事实上,甚至undefined也是一个值)。

例子:

var a;
typeof a;     # => "undefined"

a = null;
typeof null;  # => "object"

这在函数参数中很有用。您可能希望有一个默认值,但可以考虑null。在这种情况下,你可以:

function doSomething(first, second, optional) {
    if (typeof optional === "undefined") {
        optional = "three";
    }
    // do something
}

如果你省略了可选参数doSomething(1,2),那么optional将是“three”字符串,但如果你传递doSomething(1,2, null),那么optional将是null。

至于equal ==和strict equal ===比较器,第一个是弱类型,而strict equal也检查值的类型。这意味着0 == "0"将返回true;而0 === "0"将返回false,因为数字不是字符串。

您可以使用这些操作符来检查undefined和null之间的值。例如:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

最后一种情况很有趣,因为它允许你检查一个变量是否为undefined或null。

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true

如果你的(逻辑)检查是否定的(!),你想捕获JS的null和undefined(因为不同的浏览器会给你不同的结果),你会使用限制性较低的比较: 例如:

var ItemID = Item.get_id();
if (ItemID != null)
{
 //do stuff
}

这将捕获null和undefined

规范是这些问题的完整答案。以下是摘要:

For a variable x, you can: check whether it's null by direct comparison using ===. Example: x === null check whether it's undefined by either of two basic methods: direct comparison with undefined or typeof. For various reasons, I prefer typeof x === "undefined". check whether it's one of null and undefined by using == and relying on the slightly arcane type coercion rules that mean x == null does exactly what you want. The basic difference between == and === is that if the operands are of different types, === will always return false while == will convert one or both operands into the same type using rules that lead to some slightly unintuitive behaviour. If the operands are of the same type (e.g. both are strings, such as in the typeof comparison above), == and === will behave exactly the same.

更多阅读:

安格斯·克罗尔的《真理、平等和JavaScript》 Andrea Giammarchi的JavaScript强制解密 JavaScript常见问题:JavaScript类型转换