如何检查一个变量,如果是
null
或undefined
,是什么之间的差异null
和undefined
?==
和之间有什么区别===
(很难在Google上搜索“ ===”)?
如何检查一个变量,如果是null
或undefined
,是什么之间的差异null
和undefined
?
==
和之间有什么区别===
(很难在Google上搜索“ ===”)?
Answers:
如何检查一个变量,如果它
null
还是undefined
...
是变量null
:
if (a === null)
// or
if (a == null) // but see note below
...但请注意,如果a
is ,则后者也适用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`)
}
......是什么之间的差异
null
和undefined
?
它们都是通常用来表示缺少某些东西的值。undefined
是更通用的变量,用作变量的默认值,直到为其分配了其他值,作为调用函数时未提供的函数参数的值,以及当您询问对象时获得的值没有它的财产。但也可以在所有这些情况下明确使用它。(不具有属性的对象和具有带值的属性undefined
之间存在区别;调用undefined
具有参数值的函数并将该参数完全关闭是有区别的。)
null
比undefined
:更具体:是空白对象引用。当然,JavaScript是松散类型的,但并非与JavaScript交互的所有事物都是松散类型的。如果浏览器中的DOM之类的API需要空白的对象引用,则使用null
,而不是undefined
。同样,DOM的getElementById
操作返回一个对象引用-一个有效的对象引用(如果找到了DOM元素),或者null
(如果没有找到)。
有趣的是(或者不是),它们是自己的类型。也就是说,null
是Null类型undefined
中的唯一值,也是Undefined类型中的唯一值。
“ ==”和“ ===”有什么区别
它们之间的唯一区别是,==
它将强制输入以尝试使值匹配,而===
不会。举例"1" == 1
来说,是正确的,因为"1"
强制到1
。但是"1" === 1
是false,因为类型不匹配。("1" !== 1
是。)的第一步(实际)===
是“操作数的类型是否相同?” 如果答案为“否”,则结果为false
。如果类型相同,那么它将完全==
一样。
类型强制使用非常复杂的规则,并且可能产生令人惊讶的结果(例如,"" == 0
是正确的)。
规格中的更多内容:
if (a) { ... }
表示“如果a
是真实的”,其中“真实的”是非零,非空,非不确定,非假,非空字符串值。:-)
null
不是对象,而是对象引用,表示“无对象”。这很重要,因为当主机提供的接口提供对象引用但没有提供对象引用node.nextSibling
时(例如,何时node
是其父元素中的最后一个元素,或者getElementById
没有该ID的元素),这就是主机提供的接口所使用的接口。主机用于此目的的技术可能不像JavaScript关于变量/属性类型那样灵活,因此有必要提供null
obj ref(与相对undefined
)。
typeof null
返回“对象”是有意义的。唯一有意义的其他值为“ null”,因为它肯定会返回不同于的值typeof undefined
。null表示一个空对象引用,至少,这意味着保存它的变量是针对某种“对象”的。如果这是一个错误,那是一个很好的错误。无论如何,关于答案,跨窗口脚本编写过程中有关undefined
!== 的技巧undefined
是众所周知的,尤其是用于调试目的。
区别是微妙的。
在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) then
optional将是"three"
字符串,但是如果您通过,doSomething(1, 2, null)
则optional将是字符串null
。
对于相等==
和严格相等的===
比较器,第一个是弱类型,而严格相等也检查值的类型。这意味着0 == "0"
将返回true;while 0 === "0"
将返回false,因为数字不是字符串。
您可以使用这些运营商之间要检查undefined
的null
。例如:
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
规范是为这些问题提供完整答案的地方。总结如下:
x
,您可以:null
通过使用进行直接比较来检查是否===
。例:x === null
undefined
通过以下两种基本方法之一检查它:与undefined
或直接比较typeof
。由于种种原因,我更喜欢typeof x === "undefined"
。null
并undefined
通过使用==
和依靠略为神秘的强制类型来强制x == null
执行您想要的操作。==
和之间的基本区别===
是,如果操作数是不同类型的,===
则将始终返回,false
而==
将使用导致某些稍微不直观的行为的规则将一个或两个操作数转换为相同类型。如果操作数是相同类型的(例如,两个都是字符串,例如typeof
上面的比较),==
并且===
它们的行为将完全相同。更多阅读:
未定义
这意味着该变量尚未初始化。
范例:
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是布尔对象。
尝试不同的逻辑。您可以使用下面的代码检查所有四(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);
}
}
==
和===
很好这里描述。