JavaScript检查null与undefined以及==和===之间的差异

2020/09/23 18:21 · javascript ·  · 0评论
  1. 如何检查一个变量,如果是nullundefined,是什么之间的差异nullundefined

  2. ==之间有什么区别===(很难在Google上搜索“ ===”)?

如何检查一个变量,如果它null还是undefined...

是变量null

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

...但请注意,如果ais ,则后者也适用undefined

undefined

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

...但是再次,请注意,最后一个是模糊的;如果a是的话,也是如此null

现在,尽管有上述情况, 检查这些内容通常方法是使用它们是的事实

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" === 1false,因为类型不匹配。"1" !== 1是。)的第一步(实际)===是“操作数的类型是否相同?” 如果答案为“否”,则结果为false如果类型相同,那么它将完全==一样。

类型强制使用非常复杂的规则,并且可能会产生令人惊讶的结果(例如,"" == 0是正确的)。

规格中的更多内容:

区别是微妙的。

在JavaScript中,undefined变量是从未声明或从未分配值的变量。假设您声明var a;了一个实例,那么a它将为undefined,因为它从未分配任何值。

但是,如果您随后分配,a = null;a现在为null在JavaScript中,null是一个对象(typeof null如果您不相信我,请在JavaScript控制台中尝试),这意味着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;while 0 === "0"将返回false,因为数字不是字符串。

您可以使用这些运营商之间要检查undefinednull例如:

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

最后一种情况很有趣,因为它允许您检查变量是未定义的还是null,而没有别的:

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

规范是为这些问题提供完整答案的地方。总结如下:

  1. 对于变量x,您可以:
    • null通过使用进行直接比较来检查是否===例:x === null
    • undefined通过以下两种基本方法之一检查它:与undefined直接比较typeof由于种种原因,我更喜欢typeof x === "undefined"
    • 检查它是否是一个nullundefined利用==和依托略有神秘的强制类型转换规则,意味着x == null你想要做什么。
  2. ==之间的基本区别===是,如果操作数是不同类型,===则将始终返回,false==使用导致某些稍微不直观的行为的规则会将一个或两个操作数转换为相同类型如果操作数具有相同的类型(例如,两个都是字符串,例如typeof上面比较),==并且===它们的行为将完全相同。

更多阅读:

如何检查变量是否为null或未定义

只需检查变量是否具有如下有效值:

if(variable)

如果变量不包含,它将返回true:

  • 空值
  • 未定义
  • 0
  • “”(空字符串)
  • N

未定义

这意味着该变量尚未初始化。

范例:

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

广告1. null不是全局对象的属性的标识符,像undefined

广告2. ===检查值和类型。==不要需要相同类型和由隐式转换比较之前(使用.valueOf().toString())。这是全部(src):

如果

在此处输入图片说明

==(其否定!=

在此处输入图片说明

===(其否定!==

在此处输入图片说明

如果(逻辑)检查是否为负号(!),并且您希望同时捕获JS nullundefined (由于不同的浏览器将为您提供不同的结果),则可以使用限制性较小的比较:例如:

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

这将同时捕获nullundefined

尝试不同的逻辑您可以使用下面的代码检查所有四(4)条条件以进行验证,例如not null,not blank,not undefined和not zero,仅在javascript和jquery中使用此代码(!(!(variable)))。

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);
}

}

本文地址:http://javascript.askforanswer.com/javascriptjianchanullyuundefinedyijihezhijiandechayi.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!