Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript if(a)与amp;if(a!=空&a!=未定义)_Javascript_Html - Fatal编程技术网

Javascript if(a)与amp;if(a!=空&a!=未定义)

Javascript if(a)与amp;if(a!=空&a!=未定义),javascript,html,Javascript,Html,在DOM中填充数据时,我面临许多问题,因为我要使用的对象或数组中没有值 例如,我有一个对象: var obj = { name: 'rajat', age: 20 } 我正在动态填充HTML元素上的数据,如下所示: <p id='paragraph'></p> var data = document.getElementById('paragraph'); data.innerHTML = obj.name; var data=document.get

在DOM中填充数据时,我面临许多问题,因为我要使用的对象或数组中没有值

例如,我有一个对象:

var obj = {
  name: 'rajat',
  age: 20
}
我正在动态填充HTML元素上的数据,如下所示:

<p id='paragraph'></p>  

var data = document.getElementById('paragraph');
data.innerHTML = obj.name;

var data=document.getElementById('段落'); data.innerHTML=obj.name;
现在,我只想在给HTML元素赋值之前添加条件,我被
if(obj.a)
if(obj.a!=undefined&&obj.a!=null)
弄糊涂了

有人能解释一下这两者的区别吗

if (obj.a)
测试以查看
obj.a
是否为
null
未定义的
NaN
0
false
(空字符串)中的任何一个

只需检查
null
undefined
,与

if (obj.a != null)
因为这就是
=已定义。事实上,这是使用
的少数情况之一=
更可取==

[编辑]在一篇评论中指出,由于JavaScript中存在
-0
(就像所有IEEE浮点系统中一样),这也是“错误的”。
如果(obj.a)
将计算为
true
,如果
obj.a
的值是真的,那么一切都是真的,但是

  • false
  • 0
  • +0
    -0
  • `
    长度为0的字符串
  • null
  • 未定义
  • NaN
if(obj.a!=undefined&&obj.a!=null)
即使
obj.a

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

因此,它的排他性更小,
obj.a
可以是更多的值,而不需要输入
if

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

  • false
  • 未定义
  • null
  • “”
  • +/-0
其他任何内容都被评估为
true
。因此,在您的情况下,
if(obj.a)
将在
obj.a
为上述任何项目符号值时计算为false。但是,
if(obj.a!=undefined&&obj.a!=null)
将只检查这两个值(
undefined
null
),这意味着如果该值是任何其他错误项,它仍将计算为true


本博客是进一步解释的好资源:

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

因此,如果JS引擎遇到
if
语句,并已将表达式转换为布尔值

例如:

//布尔值将值转换为布尔值
//以下值转换为false,其余值转换为true
console.log(布尔值(0));//假的
console.log(布尔(“”));//假的
console.log(布尔值(null));//假的
console.log(布尔值(未定义));//假的
console.log(布尔值(NaN));//假的
console.log(布尔值(false));//假的
//另外,您还可以使用双精度转换为布尔值!!操作人员
//例如:
控制台日志(!!5);//真的

console.log(!!'random');//true
false
false
不同吗?我认为false是错误的,事实上它是固定的,因为我正在键入第二个
的答案,如果
有点混乱的话。如果
obj.a
是“hello”、215或其他任何东西,它也将计算为true。知道它何时计算为false可能会很有用。@MarkMeyer我认为“即使,如果”这个词涵盖了这个列表仍然是不完整的。完整的列表是。而且
NaN
是“错误的”。这仍然是不完整的。完整的列表是。@Xufox虽然该列表可能更明确,但我认为
0
意味着
+/-0
。我知道它们是不同的,但都是0。也就是说,我会在帖子中明确这一点。唯一的另一个区别是
document.all
,它将在旧IE浏览器中实际评估
true
(不太可能,但并非不可能)。假设代码>文档,我认为这是一个错误的做法。所有的< /代码>是FalSee。请参阅。此列表不完整。完整的列表是。@Xufox好的,你给了我
-0
但是
文档。所有的
?这不可能在语言规范中。@Pointy MDN:提供对文档中所有元素的访问。这是一个遗留的非标准属性,不应使用。@Luca sure,它将是
null
未定义的
,但语言规范不知道或不关心浏览器API。换句话说,就JavaScript而言,
document.all
document.津巴布韦
if (obj.a != null)