请解释“var myValue = myInput.value || 0;”对我来说 :)

时间:2010-09-27 13:37:33

标签: javascript

  

可能重复:
  In Javascript, what does it mean when there is a logical operator in a variable declaration?

在网上偶然发现这个代码,不知道它做了什么,也无法找到FireBug,而且由于特殊字符我无法谷歌...

var myValue = myInput.value || 0;

谢谢! :)

9 个答案:

答案 0 :(得分:4)

如果未定义myInput.value(或其他假值),则会设置默认值0

一些例子......

myInput.value = undefined
var myValue = myInput.value || 0;
// myValue = 0

myInput.value = 10
var myValue = myInput.value || 0;
// myValue = 10

答案 1 :(得分:2)

||通常称为默认运算符。它允许你给出一个默认值,如果其他东西是假的。因此,如果myInput.valueundefined,则myValue将被分配0

答案 2 :(得分:1)

由于javascript解释器的构建方式,它可以解释某些类的值,甚至可以将值的存在(或不存在)解释为true或false

  • undefined,null,false,0,空字符串,NaN可以解释为false
  • 非假值的存在可以被解释为非假,因此在许多情况下,是真的;尽管如此,不要将非虚假与真实混为一谈。它们有时被松散地解释为相同,但不是 - false包含所有不被解释为false的东西,而true则更具体。

因此:

if (myMethod)
    myMethod();

可以在运行之前检查myMethod是否存在。

||符号是一个短路OR语句。如果OR的第一部分被解释为或者可以被解释为非假,则该语句的该部分将被主持,并且该值将被用作myValue。如果javascript认为该语句的第一部分被解释为false,则将返回OR的第二部分。

因此在声明中:

var myValue = myInput.value || 0;

myValue将成为myInput.value包含的任何内容,如果它包含javascript可以解释为非false的任何内容。因此它可能包含"Hi, hell of a day we've got here!",并且会返回到myValue。

当我说不是假的时候,我并不严格意味着真实,因为“嗨,我们到这里来的一天”并不是[严格地说]被解释为真实,而是被“强迫”成为这样解释。

如果myInput.value不包含javascript强制解释为true的任何内容,则0将返回myValue。

所以在这种情况下,如果myInput.value未定义,null,false,0等,那么myValue = 0

答案 3 :(得分:0)

如果myInput.value为null(未定义),这是一种默认值为0的方法

答案 4 :(得分:0)

如果myValue值是JavaScript中被视为false的任何值(尤其是myInput或者0,则myInput设置为undefinednull的值||)。诀窍是a||b运算符的短路行为。当您评估a||为真时,a运算符会返回console.log('a'||'b'); // 'a'

||

当第一个参数为false时,console.log(undefined||'b'); // 'b' 运算符返回其第二个参数:

var foo = 0;
console.log('a'||foo++);
console.log(foo); // 0
console.log(undefined||foo++); // 0
console.log(foo); // 1

考虑这个也很好:

{{1}}

答案 5 :(得分:0)

Javascript具有定义的从左到右的评估顺序。所以,如果你写的东西像

  

if(method()|| method2()){...}

如果method()返回true,

方法2()将永远不会发生,因为true或者任何东西总是为真。

这与您在Javascript中提供的示例相同。

如果“myinput.value”评估为trueish,则将分配此值,否则将为每个falsish值(null,0,“”)分配0。

答案 6 :(得分:0)

||许多语言中的运算符包括称为短切的优化:如果左侧评估为真值,则不需要评估右侧。真的||任何事情==真实。这通常用于提供默认值,如示例代码中所示。如果左侧myInput.value的计算结果为true,则整个表达式将返回该值。否则,整个表达式将返回右手值0.

请注意,这也取决于||运算符返回原始值而不是布尔值true或false值。对于逻辑测试,每一侧都被评估为真或假,但不是表达式的返回值。

功能或(a,b){       如果(a){return a; }       返回b;   }

答案 7 :(得分:0)

如果以前的值可以视为False,则

MyValue将等于myInput.value0

值可以视为False是空字符串(''),零(0)等。此代码中True myInput.value == False的任何内容

答案 8 :(得分:-1)

这意味着如果未定义myInput.value,则myValue将设置为0. Think ||与OR相同。