2013-06-25 44 views
0

此代码有什么问题?“||”运算符在为变量赋值时不起作用

var sha = 6; 
var secondParameter = dan || sha; 
alert(secondParameter); 

我试了很多浏览器。没有警报。 如果我加上var dan这样:

​​

警报将会发生。所以在“||”中的问题。我看到很多代码,它使用这样的操作符!所以我不知道..

+8

'dan'没有被定义。看看错误控制台。 – akonsu

+1

尝试访问未定义的变量会导致错误。 – Barmar

+5

未定义变量和具有未定义值的变量之间存在很大差异。 – thefrontender

回答

3
var sha = 6; 
var dan = null; 
var secondParameter = dan || sha; 
alert(secondParameter); 

试试这个。您可以使用||运算符进行合并,但必须声明所有变量以便引用

+0

顺便说一句,你不需要将它设置为null只是'var dan;'就足够了。 – PSL

+0

@PSL是的,我同意。 – TGH

+0

我问过之前我试过了两个版本。他们两个都不行。 –

7

您没有定义dan。执行停止在该错误。检查浏览器控制台是否有错误。

当你定义dan时,执行继续,但这可能不是你想要的。

这种代码的JavaScript中的目的是为了说,如果dan具有falsy值(计算结果为false值的任何值,即0''nullfalseundefined,或NaN),然后使用的值sha

如果在定义dan超出你的责任,(即其他一些脚本应该已经设置),那么你可以使用结构检查其存在类似如下:

secondParameter = typeof(dan) == 'undefined' ? sha : dan;

(未测试,希望它的作品:)无论如何,它应该给你一个想法)

Check here for documentation on logical operators

而且,这个问题可能会给你更深入的了解:Javascript || or operator with a undefinded variable

+1

其实我试图用“||”而不是三元操作符。现在我知道何时使用它们中的每一个。谢谢。 –

1

这是在它被赋予的东西像一个参数,但没有分配一个值的情况下使用,或者是falsy

falsy0, false, null or undefined

例如:

var sha = 6; 
var dan = undefined; 
var secondParameter = dan || sha; 
alert(secondParameter); 

你西港岛线升得6

一个很好的例子使用,这将是这样的:

function funcWithCallback(callback){ 
    callback = callback || function(){}; 
    callback(); 
} 

在这个例子中,如果回调是不确定的(或falsy)然后设置回调的函数的新实例

在这样的情况下使用它将确保没有错误

+0

由于允许你将'undefined'明确地分配给一个变量,所以使得这个混淆更加激化,它不同于没有首先定义变量。 – Barmar

+0

这是回答这个问题吗? – Ryan

+0

我更愿意解释你可以使用它的情况。 与代码的问题是,'丹'没有定义的答案是什么,但这很容易.. – FabianCook

0

说明:作品是:如果第一个条件是假的,那么它检查第二个条件。因此,为了显示第二个参数,您必须将第一个参数设为null。

1

JavaScript在处理未声明的变量(未定义的变量)和未定义的值方面存在差异。在以下示例中,变量dan已声明但从未设置,因此它的值为undefined。返回它可以找到的第一个true值,所以如果我传递除空字符串,0,false,NaN,undefined或NULL之外的任何值,它将console.log传递的值。否则它会记录“默认值”。

function test(dan){ 
    console.log(dan || "default value"); 
    return dan===undefined; 
} 
console.log(test());//default value, then true 
console.log(test(22));//22 then false 

检查是否是通过一个变量将是看是否该变量的值是未定义的更健壮的方式:

function test(dan){ 
    dan = (typeof(dan)==='undefined')?"default value":dan; 
} 

在你的榜样变量dan完全不声明(变量未定义),这就是为什么你会得到错误“丹没有定义”,因为丹没有声明。

function test(){ 
    return dan===undefined;//ReferenceError: dan is not defined 
} 
console.log(test()); 

你可以更改您的代码如下:

var sha = 6, dan;//dan is declared here but no value is set 
var secondParameter = dan || sha; 
console.log(dan===undefined);//true 
console.log(secondParameter);//6 

如果你想检查某个对象有一个属性,然后它会不会引发错误:

function test(){ 
    return window.neverSetOrDeclared===undefined; 
} 
console.log(test());//true 

当您尝试检查未定义的属性或空值时,它会引发错误:

null.something//throws error 
undefined.something//throws error 
window.neverSetOrDeclared===undefined//throws error 
+1

它不安全的比较变量直接'undefined '在某些情况下,未定义本身可以被分配给其他东西,在这种情况下,这些检查将失败。更好的方法是检查typeof运算符:typeof(dan)==='undefined' – BuddhiP

+0

@BuddhiP你是对的,但是他们正确的心态会重新定义undefined还是window?解决方法是像jQuery一样:(function(window,undefined){your code})(window);如果你正在制作一个图书馆供任何人使用(甚至是那些重新定义窗口和/或udefined的人),而不是你提出一个有效的观点。 – HMR

+0

当dan没有声明时(未定义变量),typeof(dan)不会抛出错误。所以示例代码不会表现相同。 – HMR