在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)
感到困惑。
谁能解释一下两者之间的区别?
答案 0 :(得分:4)
if (obj.a)
测试以查看obj.a
是否不是null
,undefined
,NaN
,0
,false
或{{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
其他所有内容都被评估为true
。因此,在您的情况下,如果if(obj.a)
是上述项目符号值中的任何一个,则obj.a
的评估结果为false。但是if(obj.a != undefined && obj.a != null)
仅会专门检查这两个值(undefined
和null
),这意味着,如果该值是其他任何假项目,则它仍将为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');
}