JavaScript检查null vs. undefined和==和===之间的差异

  1. 我如何检查一个变量,如果它是nullundefinednullundefined之间的区别是什么?

  2. =====之间的区别是什么(很难搜索谷歌的“===”)?

491354 次浏览

我如何检查一个变量,如果它是nullundefined

是变量null:

if (a === null)
// or
if (a == null) // but see note below

...但请注意,如果aundefined,后者也是正确的。

undefined:

if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below

...但是,请再次注意,最后一个是模糊的;如果anull,它也是正确的。

现在,尽管有上述情况,通常检查它们的方法是使用它们是美甲师的事实:

if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}

这是由规范中的ToBoolean定义的。

...nullundefined之间有什么区别?

它们都是通常用来表示缺少某物的值。undefined是更通用的一个,用作变量的默认值,直到它们被赋予其他值,作为函数调用时没有提供的函数参数的值,以及当你向对象请求它不具有的属性时得到的值。但它也可以显式地用于所有这些情况。(对象不具有属性和具有值为undefined的属性之间是有区别的;调用一个参数为undefined的函数和完全不使用该参数是有区别的。)

nullundefined更具体:它是一个空白对象引用。JavaScript当然是松散类型的,但并不是所有与JavaScript交互的东西都是松散类型的。如果像浏览器中的DOM这样的API需要一个空白的对象引用,我们使用null,而不是undefined。类似地,DOM的getElementById操作返回一个对象引用。一个有效的(如果它找到了DOM元素),或者null(如果它没有)。

有趣的是(或者不有趣),他们有自己的类型。也就是说,null是Null类型中的唯一值,而undefined是Undefined类型中的唯一值。

“==”和“===”有什么区别?

它们之间的唯一区别是==将执行类型强制以尝试使值匹配,而===不会。例如,"1" == 1为真,因为"1"强制转换为1。但是"1" === 1===0,因为类型不匹配。("1" !== 1是真的。)===的第一步(实际)是“操作数的类型是否相同?”如果答案是“否”,结果是false。如果类型相同,则执行与==完全相同的操作。

类型强制使用相当复杂的规则,并可能产生令人惊讶的结果(例如,"" == 0为真)。

详细说明如下:

差别很细微。

在JavaScript中,undefined变量是一个从未声明或从未赋值的变量。比方说你声明了var a;,那么a将是undefined,因为它从未被赋值。

但如果你分配a = null;,那么a现在将是null。在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
}

如果你省略optional参数,doSomething(1, 2) thenoptional将是"three"字符串,但如果你传递doSomething(1, 2, null),那么optional将是null字符串。

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

您可以使用这些操作符在undefinednull之间进行检查。例如:

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

未定义的

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

例子:

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是一个布尔对象。

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

    对于变量x,你可以:

    • 通过直接比较===来检查它是否为null。例如:# EYZ2
    • 通过以下两种基本方法之一检查它是否为undefined:直接与undefinedtypeof进行比较。对于各种原因,我更喜欢typeof x === "undefined"
    • 检查它是否是nullundefined中的一个,使用==并依赖于稍微神秘的类型强制规则,这意味着x == null完全是您想要的
    • 李< / ul > < / >
    • =====之间的基本区别是,如果操作数类型不同,===将总是返回false,而==将使用规则将一个或两个操作数转换为同一类型,这将导致一些略显不直观的行为。如果操作数类型相同(例如,都是字符串,如上面的typeof比较),=====的行为完全相同。

更多阅读:

如果你的(逻辑)检查是否定的(!),你想捕获JS nullundefined(因为不同的浏览器会给你不同的结果),你会使用限制性较小的比较: 例如:< / p >
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}

这将捕获nullundefined

我如何检查一个变量,如果它是空的或未定义

检查一个变量是否有一个有效值,就像这样:

if(variable)

如果变量不包含:

  • 未定义的
  • 0
  • ""(空字符串)

# EYZ0。你可以使用下面的代码检查所有(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);
}

广告1。null不是全局对象属性的标识符,比如undefined 可以

let x;      // undefined
let y=null; // null
let z=3;    // has value
// 'w'      // is undeclared


if(!x) console.log('x is null or undefined');
if(!y) console.log('y is null or undefined');
if(!z) console.log('z is null or undefined');


try { if(w) 0 } catch(e) { console.log('w is undeclared') }
// typeof not throw exception for undelared variabels
if(typeof w === 'undefined') console.log('w is undefined');

广告2。===检查值和类型。==不需要相同的类型,并在比较之前进行隐式转换(使用.valueOf().toString())。这里你有所有(src):

如果

enter image description here

= =(它的否定! =)

enter image description here

= = =(它的否定= = !)

enter image description here