我看过几个网页说<!>“a = b || <!> '等等' QUOT;如果b未定义或为null,则应将'blah'分配给a。但是,如果我在Firebug中键入它或在代码中使用它,它会在FF3 / win列表中抱怨b未定义。任何提示?

编辑:我正在寻找可能根本不存在b的情况。例如,没有id的DOM节点。

有帮助吗?

解决方案

我认为你正在寻找这个:

var a = typeof b == 'undefined' ? 'blah' : b;

其他提示

如果b存在,并且是false,null等,那么它将以您期望的方式工作。所有你需要做的就是上面那行,把var b = null;

如果您考虑一下,这是有道理的。它基本上做了这样的事情......

a = function(){ if(b){return b;} else{ return 'blah' } }();

请注意,它检查b的值是否真实...如果b不存在,则会出现异常。

关于未定义的变量

<!>

QUOT; <!>未定义QUOT;在JavaScript中并不意味着'变量不存在'。它表示<!> quot;变量的值是undefined <!> quot;的特殊值。例如:

alert(nosuchvariable);
=> throws exception

var somevariable; // note it's never assigned
alert(somevariable);
=> This alerts with 'undefined'

关于检查变量是否存在。

因此,如果我们尝试读取b并且没有b这样的变量,我们会得到一个例外。如果我们试图找出是否定义了b,那么这没有用。

通过检查顶级window对象,可以查看是否存在全局变量。所有全局变量实际上只是var对象中的字段。例如:

foo = 'Hello';
alert( window.foo );
=> alerts 'Hello'

因为您知道窗口对象已经存在,所以您可以检查它的字段 检查javascript中不存在的字段会给你typeof并且不会崩溃,因此你可以进行合并,或者将"undefined"放在变量或其他

对于本地变量(用null声明的事物),你无法检查它们是否存在。它们不是<!> quot; live <! > QUOT;全局变量的方式<!>“生活<!>”;在window对象中,任何引用它的正常尝试都会导致异常:例如:

alert(a);
=> exception because a is meaningless
alert(d45pwiu4309m9rv43);
=> exception because that is equally meaningless

然而,有一个例外(我知道,感谢评论中的J c),<=>运算符。如果您尝试获取不存在的类型,将不会崩溃,它将返回字符串 <=>。
这为您提供了一种检查不存在的局部变量的方法。例如:

if( typeof(djfsd) === "undefined" )
  alert('no such variable');

关于不存在的DOM元素

有几条评论提到没有ID的DOM元素等等......

它是一个DOM元素并不是真正相关的事实。将DOM视为数据库或文件,将元素视为该数据库中的行或该文件中的单词。为了任何事情,你必须搜索数据库,找到正确的行,然后将数据拉出来。数据被放入javascript对象中。然后,您可以通过操作该对象来访问它,并且可以根据需要将对象放在变量中。例如:

document.getElementById('foo');

这会进入dom并查找ID为'foo'的元素。如果找到一个,它会将有关该元素的一些信息放入javascript对象中,然后将该对象交还给您。如果它找不到该元素,它会将你送回<=>,但所有正常的规则仍然适用(你可以将<=>粘贴在一个变量中,或其他什么)。

它根本不会影响合并。

||是Javascript中的短路逻辑OR运算符,非常类似于C,C ++,Java,C#,Perl,PHP等......

根据维基百科,如果你把括号放在b附近,它将按预期工作。

var a = (b) || 'blah';
  

但是如果我在Firebug中键入它或在代码中使用它,它会抱怨b未定义,在FF3 / win上列出

你是什么意思,<!>未定义<!>“;?你的意思是Javascript不知道变量?然后你可以使用window.b作为<!>“; window <!>”;是顶级对象,或首先使用var b;声明b;但只有当变量时才会这样。

如果它是DOM元素,您可能必须首先尝试搜索它,例如使用document.getElementById

a = document.getElementById('b') || 'blah'

适合我。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top