if(a)与if(a!= null && a!= undefined)之间的差异

时间:2018-08-22 16:59:13

标签: javascript html

在DOM中填充数据时遇到很多问题,因为对象或数组中没有要使用的值。

例如,我有一个对象:

if(!requireNamespace("tidyverse")) install.packages("tidyverse")
library(tidyverse)
csvfile <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv", sep=";")

csvfile %>% 
  mutate(integer_group = round(fixed.acidity,0)) %>% ## Round to the nearest integer
  group_by(integer_group) %>% ## group by that variable 
  count() ## number of rows in each group

我正在动态地在HTML元素上填充数据,如下所示:

var obj = {
  name: 'rajat',
  age: 20
}

现在,我只想在为HTML元素赋值之前添加条件,我对<p id='paragraph'></p> var data = document.getElementById('paragraph'); data.innerHTML = obj.name; if(obj.a)感到困惑。

谁能解释一下两者之间的区别?

4 个答案:

答案 0 :(得分:4)

if (obj.a)

测试以查看obj.a是否不是nullundefinedNaN0false或{{1 }}(空字符串)。

""

仅检查if (obj.a != undefined && obj.a != null) null,并与

完全相同
undefined

因为这就是if (obj.a != null) 的定义方式。实际上,这是使用!=胜过!=的少数情况之一。

[edit]在评论中指出,由于!==存在于JavaScript中(就像在所有IEEE浮点系统中一样),所以它也是“假的”。

答案 1 :(得分:4)

if(obj.a)的计算结果为true,如果obj.a的值是真实的,则所有内容都是真实的,但是

  • false
  • 0
  • +0-0
  • ""''``-长度为0的字符串
  • null
  • undefined
  • NaN

if(obj.a!=undefined && obj.a!=null)即使obj.a为true也会计算为真

  • false
  • 0
  • +0-0
  • ""''``-长度为0的字符串
  • NaN

因此,它的排他性较小,并且obj.a可以是更多的值,而无需输入if

答案 2 :(得分:0)

在Javascript中,if评估条件的“真实性”。以下值为“ falsey”:

  • false
  • undefined
  • null
  • “”
  • +/- 0
  • NaN

其他所有内容都被评估为true。因此,在您的情况下,如果if(obj.a)是上述项目符号值中的任何一个,则obj.a的评估结果为false。但是if(obj.a != undefined && obj.a != null)仅会专门检查这两个值(undefinednull),这意味着,如果该值是其他任何假项目,则它仍将为true。

此博客可作为进一步解释的好资源:https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

答案 3 :(得分:0)

这与JavaScript type-coercion 有关,这是一个确定值如何转换为不同类型的概念。 JavaScript是一种松散类型的语言(没有严格的类型,例如int,string等)。

因此,如果JS引擎遇到if语句并将其转换为布尔值。

例如:

// Boolean converts the value to a boolean
// The following values are converted to false, the rest is converted to true

console.log(Boolean(0));  // false
console.log(Boolean(''));  // false
console.log(Boolean(null));  // false
console.log(Boolean(undefined));  // false
console.log(Boolean(NaN));  // false
console.log(Boolean(false));  // false

// Bonus you can also convert to boolean really concise with the double !! operator 
// For example:

console.log(!!5);  // true
console.log(!!'random');  // true

因此代码:

if(a!=null && a!=undefined){}

不同
 if(a){}

因为您错过了将被转换为false的其他类型。例如:

if(NaN){
  console.log('I wont log');
}