如何确定变量是'undefined'还是'null'?
如何确定变量是undefined
还是为null
? 我的代码如下:
var EmpName = $("div#esd-names div#name").attr('class'); if(EmpName == 'undefined'){ //DO SOMETHING };
<div id="esd-names"> <div id="name"></div> </div>
但是,如果我这样做,JavaScript解释器停止执行。
您可以使用抽象相等运算符的性质来执行此操作:
if (variable == null){ // your code here. }
因为null == undefined
是真的,所以上面的代码会同时捕获null
和undefined
。
同时捕获null
和undefined
的标准方法是这样的:
if (variable == null) { // do something }
– 这是100%相当于更明确,但不那么简洁:
if (variable === undefined || variable === null) { // do something }
在编写专业JS时,理解[类型相等和==
vs ===
] [1]的行为是理所当然的。 因此我们使用==
,只比较null
。
再次编辑
建议使用typeof
的评论是错误的。 是的,如果变量不存在,我上面的解决方案将导致ReferenceError。 这是一件好事。 这个ReferenceError是可取的:它会帮助你找到你的错误,并在你发布代码之前修复它们,就像其他语言的编译器错误一样。
你不应该在你的代码中引用未声明的变量。
if (variable == null) { // Do stuff, will only match null or undefined, this won't match false }
结合以上的答案,似乎最完整的答案是:
if( typeof variable === 'undefined' || variable === null ){ // Do stuff }
这应该适用于任何未声明或声明并显式设置为null或undefined的变量。 对于任何具有实际非空值的声明变量,布尔表达式的计算结果应为false。
if (typeof EmpName != 'undefined' && EmpName) {
如果值不是:则评估为真:
-
空值
-
未定义
-
为NaN
-
空字符串(“”)
-
0
-
假
更新:
检查undefined
带来更多的信心
jQuery attr()
函数返回一个空字符串或实际值(并且永远不会null
或undefined
)。 唯一一次返回undefined
是当你的选择器没有返回任何元素。
所以你可能要测试一个空白的字符串。 或者,由于空字符串,null和undefined都是false-y,所以可以这样做:
if (!EmpName) { //do something }
我喜欢用这个:
if (!!variable) { //do something }
它捕获null和undefined
如果你想检查的变量是全局的,那么
if (window.yourVarName) { // Your code here }
即使yourVarName
变量不存在,这种检查方式也不会抛出错误。
例如:我想知道我的浏览器是否支持History API
if (window.history) { history.back(); }
这是如何工作的:
window
是一个保存所有全局变量作为属性的对象,在JavaScript中尝试访问一个不存在的对象属性是合法的。 如果history
不存在,则window.history
返回undefined
。 undefined
是falsey,所以if(undefined){}
块中的代码将不会运行。
我来写我自己的功能… javascript是奇怪的
可以从字面上任何东西。 (请注意,这也检查变量是否包含任何可用的值 ,但由于这些信息通常也是需要的,所以我觉得值得一提)。 请考虑留言。
function empty(v) { let type = typeof v; if(type === 'undefined') { return true; } if(type=== 'boolean') { return !v; } if(v === null) { return true; } if(v === undefined) { return true; } if(v instanceof Array) { if(v.length < 1) { return true; } } else if(type === 'string') { if(v.length < 1) { return true; } if(v==='0') { return true; } } else if(type === 'object') { if(Object.keys(v).length < 1) { return true; } } else if(type === 'number') { if(v===0) { return true; } } return false; }
打字稿兼容。
编辑。 这个函数应该和PHP的empty()
函数 完全一样(请参阅RETURN VALUES
)
考虑undefined
, null
, false
, 0.0
, "0"
{}
, []
为空。
"0.0"
, NaN
, " "
, true
被认为是非空的。
由于您使用的是jQuery ,因此您可以通过使用单个函数来确定变量是未定义的还是其值为空。
var s; // undefined jQuery.isEmptyObject(s); // will return true; s = null; // defined as null jQuery.isEmptyObject(s); // will return true; // usage if(jQuery.isEmptyObject(s)){ alert('Either variable: s is undefined or its value is null'); }else{ alert('variable: s has value ' + s); } s = 'something'; // defined with some value jQuery.isEmptyObject(s); // will return false;
我刚才有这个问题,即检查对象是否为空。
我只是使用这个:
if (object) { Somecode}
即
if (document.getElementById("enterJob")) document.getElementById("enterJob").className += ' current';
jQuery检查元素不为空
var dvElement = $('#dvElement'); if (dvElement.length > 0) { //do something } else{ //else do something else }
最好的办法:
if(typeof variable==='undefined' || variable===null) { /* do your stuff */ }
var i; if(i == null || typeof i == 'undefined'){ console.log(i,'i is undefined or null') }else{ console.log(i,'i has some value') }
我在Chrome控制台上运行这个测试,使用(void 0)你可以检查undefined
var c; undefined if(c === void 0)alert(); // output = undefined var c = 1; // output = undefined if(c === void 0)alert(); // output = undefined // check c value c // output = 1 if(c === void 0)alert(); // output = undefined c = undefined; // output = undefined if(c === void 0)alert(); // output = undefined
您可以通过简单的使用typeof来检查值是未定义的还是null:
if(typeof value == 'undefined'){
调用typeof null将返回“object”值,因为特殊值null被认为是空对象引用。 通过版本5的Safari和通过版本7的Chrome有一个怪异的地方,正则表达式的调用类型返回“功能”,而所有其他浏览器返回“对象”。
var x; if (x === undefined) { alert ("only declared, but not defined.") }; if (typeof y === "undefined") { alert ("not even declared.") };
您只能使用第二个:因为它将检查定义和声明
要测试一个变量是否为空或未定义,我使用下面的代码。
if(sVal === '' || sVal === null ||typeof sVal === 'undefined'){ console.log('variable is undefined or null'); }
这是一个非常古老的问题,但我仍然认为测试这两个条件的最好/安全的方法是将值赋给字符串:
var EmpName = $("div#esd-names div#name").attr('class'); // Undefined check if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){ // do something with your code } // Nullcheck if (Object.prototype.toString.call(EmpName) === '[object Null]'){ // do something with your code }
if(x==null)
在javascript中是不好的想法,用"=="
判断可能会导致意外的类型强制,不能被coffee-script读取, 在条件判断中从不使用“==”或“!=” !
if(x)
会更好,但是0和“” ,则将被视为假 ,不等于"!= null"
为真 。
我的5美分捐款的具体情况:
var bUndef = ($('#' + selectedNodeID).position() === undefined) if (bUndef) ....
该属性是undefided不是元素!