5

!==在检查 null 或 undefined 以及我是否应该使用or!=和“未定义”或未定义时,我有点困惑。

这是我正在处理的一些代码。我的 null/unudefined 等哪里出了问题?

var c = (jQuery(this).prop("target") != null && jQuery(this).prop("target") != undefined && jQuery(this).prop("target").toLowerCase() == "_blank") ? 1 : 0;

谢谢

4

7 回答 7

14

一般来说,保持简单。

要检查undefined,请使用:

foo === undefined
foo !== undefined

要检查null,请使用:

foo === null
foo !== null

要同时检查任何一个,请使用:

foo == null
foo != null

无论如何,请将您的变量存储.prop()到一个变量中以保持其干净。但在你的情况下,如果它等于"_blank",那么你知道它不是nullor undefined,所以:

var targ = jQuery(this).prop("target").toLowerCase();

var c = targ === "_blank" ? 1 : 0;

或者,您可以通过强制将其缩短boolean为 a number

var targ = jQuery(this).prop("target").toLowerCase();

var c = +(targ === "_blank");

这最后两个解决方案是安全的,因为.prop()总是会返回一个string.

于 2013-02-21T06:37:43.113 回答
6
  • 两者nullundefined都是“虚假”值,因此可以像检查布尔值一样检查它们。因此,除了您需要知道它们是否是这样的值的某些情况之外,null没有任何意义。undefined

  • 比较时,最好使用严格比较(如===!==等)

  • 如果前面的条件是“假的”,则&&in a 条件不会评估以下条件。

  • 您甚至不需要 jQuery,因为this您的 DOM 对象(大概是一个<a>)并且您正在尝试获取该target属性:

到底:

var c = (this.target && this.target.toLowerCase() === "_blank") ? 1 : 0;
于 2013-02-21T06:36:54.137 回答
1

这是检查未定义的最佳方法:

if(typeof variable_here != 'undefined'){
   // your code here.
 };

这是检查 null 的最佳方法:

if(variable_here !== null){
       // your code here.
     };

所以你的代码应该是这样的:

var c = (jQuery(this).prop("target") !== null && typeof jQuery(this).prop("target") !== 'undefined' && jQuery(this).prop("target").toLowerCase() == "_blank") ? 1 : 0;
于 2013-02-21T06:38:34.810 回答
0

由于 undefined 将是变量类型,请使用typeof

var c = (
 $(this).attr("target") != NULL && 
 typeof $(this).attr("target") != "undefined" && 
 $(this).attr("target").toLowerCase() == "_blank"
) ? 1 : 0;

但是,我认为您只需要最后一次检查。是目标"_blank"c需要是1,否则,0。是否target设置真的很重要吗?

此外,使用attr()方法获取属性,因为prop()if 用于类似selectedIndexor的属性tagName

于 2013-02-21T06:34:56.983 回答
0

不要仅仅为了检查一个值而获得相同的属性 3 次。

var c = 0;
var prop = $(this).prop("target");
if(prop && prop.toLowerCase() === "_blank") c = 1;
于 2013-02-21T06:35:21.483 回答
0

我得到了这样的东西,这与你的问题无关,但会帮助你

var targ = jQuery(this).prop("target").toLowerCase();

现在如果你想检查 targ 是 null 还是 undefined

 var c = (!targ || "") ? 1 : 0

希望对你有帮助

于 2015-06-01T08:05:01.873 回答
0

在 JavaScript 中,您不需要显式检查变量是否为 null 或未定义,因为:

  1. null 或 undefined 在布尔表达式中返回 false。

  2. JS 表达式从左到右计算。所以对于一个 || b,如果 a 为假,则只评估 b。但如果 a 为真,则不会检查 b。同样,对于 a && b,如果 a 为假,则不会评估 b。

因此, if (a != null) { "do something" } 可以写成 if (a) { "do something" } 或简单的 && "do something"。

同理,当值设置为 null 或 undefined 时,可以使用它来设置默认值:

function someFunction(age){
    var age= age|| 18;
}

参考:https ://codereview.stackexchange.com/questions/472/usage-of-the-ternary-operator-with-functions-listening-to-click-events

于 2019-07-08T14:45:03.747 回答