如何确定变量是“未定义”还是“空”?

2020/09/15 03:31 · javascript ·  · 0评论

如何确定变量is undefinednull

我的代码如下:

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为true,所以上面的代码将同时捕获nullundefined

捕获nullundefined同时进行的标准方法是:

if (variable == null) {
     // do something 
}

-100%等效于更明确但不太简洁的代码:

if (variable === undefined || variable === null) {
     // do something 
}

编写专业JS时,理所当然的是类型相等,并且=====可以理解vs 的行为因此,我们==使用和进行比较null


重新编辑

暗示使用的评论typeof是完全错误的。是的,如果变量不存在,上述解决方案将导致ReferenceError。这是一件好事。此ReferenceError是可取的:它将帮助您发现错误并在发布代码之前解决它们,就像其他语言中的编译器错误一样。如果使用输入,则无法使用try/ catch进行控制。

您的代码中不应有任何对未声明变量的引用。

结合以上答案,似乎最完整的答案是:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

这对于未声明或已声明并且显式设置为null或undefined的任何变量均适用。对于具有实际非空值的任何已声明变量,布尔表达式的求值应为false。

if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
if (typeof EmpName != 'undefined' && EmpName) {

如果值不是,则将评估为true:

  • 空值

  • 未定义

  • N

  • 空字符串(“”)

  • 0

jQuery attr()函数返回一个空字符串或实际值(从不nullundefined)。它唯一返回的时间undefined是您的选择器未返回任何元素时。

因此,您可能要针对空白字符串进行测试。另外,由于空白字符串,null和undefined为false-y,因此可以执行以下操作:

if (!EmpName) { //do something }

我来为此编写自己的函数。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;
}

兼容TypeScript。


该函数应该执行与PHP 函数完全相同的操作(请参阅参考资料empty()RETURN VALUES

认为undefinednullfalse00.0"0" {}[]为空。

"0.0"NaN" "true被视为非空。

可能最简单的方法是:

if(EmpName == null) { /* DO SOMETHING */ };

这是证明:

这是有关==在此处提供资源)的更多详细信息

在此处输入图片说明

奖金:为什么=====更清楚的原因请看agc答案

在此处输入图片说明

最短,最简单的方法:

if(!EmpName ){
 // DO SOMETHING
}

如果EmpName为:

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

如果要检查的变量是全局变量,请执行

if (window.yourVarName) {
    // Your code here
}

即使yourVarName变量不存在,这种检查方式也不会引发错误

示例:我想知道我的浏览器是否支持History API

if (window.history) {
    history.back();
}

工作原理:

window是一个对象,其中包含所有全局变量作为其属性,并且在JavaScript中尝试访问不存在的对象属性是合法的。如果history不存在,则window.history返回undefinedundefined是错误的,因此if(undefined){}块中的代码将无法运行。

由于您使用的是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) {
    // Your code
}

例如:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}

我所知,JavaScript中,我们可以检查未定义的null变量,如下所示。

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

检查所有条件:

if(variable === undefined || variable === null || variable === ''){
}

jQuery check元素不为null:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}

您可以简单地使用以下代码(我知道这样做的方法更短,但这至少可以让其他人在查看代码时更直观地观察)。

if (x === null || x === undefined) {
 // Add your response code here, etc.
}

最简单的检查方法是:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}

使用以下解决方案:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

我可以检查以下内容:

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

要测试变量是否为null或未定义,请使用以下代码。

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }

我在Chrome控制台中运行了该测试。使用(void 0)您可以检查未定义:

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

让我们看一下

  1.  

    let apple; // Only declare the variable as apple
    alert(apple); // undefined

    在上面,变量仅声明为apple在这种情况下,如果调用方法alert,它将显示未定义。

  2.  

       let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null

在第二个中,它显示为null,因为applevalue的变量为null。

因此,您可以检查值是未定义的还是null。

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}

最好的办法:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}
(null == undefined)  // true

(null === undefined) // false

因为===同时检查类型和值。两者的类型不同,但值相同。

var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}

foo == null检查应该可以解决问题,并以最短的方式解决“ u​​ndefined OR null”情况。(不考虑“没有声明foo”的情况。)但是,过去拥有3个等号(作为最佳实践)的人可能不会接受它。在只看eqeqeq三等于在eslint和tslint规则...

在这种情况下,应使用显式方法(当我们检查变量是否为变量undefinednull单独变量时),而我对该主题的贡献(目前有27个非否定答案!)是一种void 0既简便又安全的检查方法为undefined

使用foo === undefined不安全,因为undefined不是保留字,可能会被遮盖(MDN)。使用typeof === 'undefined'check是安全的,但是如果我们不关心foo-is-un-declared情况,则可以使用以下方法:

if (foo === void 0 || foo === null) { ... }

如果创建一个函数来检查它:

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}

使用内置的Nullish合并运算符(??)Ref;
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator

调用typeof null返回值“ object”,因为特殊值null被认为是空对象引用。版本5的Safari和版本7的Chrome都有一个怪癖,在正则表达式上调用typeof返回“功能”,而所有其他浏览器返回“对象”。

var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

您只能使用第二个:因为它将同时检查定义和声明

我仍然认为测试这两个条件的最佳/安全方法是将值转换为字符串:

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
}

您可以使用typeof来检查该值是未定义还是为null:

if(typeof value == 'undefined'){
本文地址:http://javascript.askforanswer.com/ruhequedingbianliangshiweidingyihuanshikong.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

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

上一篇:
下一篇:

评论已关闭!