为什么||操作员的行为是这样的吗?

时间:2018-10-21 19:58:45

标签: javascript

为什么第二个函数调用中<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.1/vue.min.js"></script> <script src="https://unpkg.com/vuelidate/dist/vuelidate.min.js"></script> <script src="https://unpkg.com/vuelidate/dist/validators.min.js"></script> <div id="app"> <input v-model="$v.user_price.$model" placeholder="user_price" type="number" :class="status($v.user_price)"> <p class="error" v-show="respectMinPrice">user price must be greater or equal to min selling price</p> </div>_value?我花了一段时间才找到这个错误。

foo

5 个答案:

答案 0 :(得分:3)

为了更好地理解,我在测试代码中加上了一个括号:

(value || Math.random() > 0.5)

由于始终定义valuenon null),条件评估为true并将'foo'分配给'_value'

希望这能为您解释它。

答案 1 :(得分:2)

因为表达式

const _value = value || Math.random() > 0.5 ? 'foo' : 'bar';

评估为:

const _value =  (value || (Math.random() > 0.5)) ? 'foo' : 'bar';

条件运算符的优先级低于表达式中的其他运算符。

value是一个非空字符串,因此在布尔上下文中其值为true。因此,条件的计算结果为true,最终结果始终为'foo'

答案 2 :(得分:1)

因为:

/proc/pid/cmdline

所以:

> 'bar' == true
false

const _value = value || Math.random() > 0.5 ? 'foo' : 'bar'; 将被随机分配值_value'foo',因为'bar'value的值是'bar',因此第二个或表达式false的一半将被评估并分配给||

答案 3 :(得分:1)

尝试一下。

const _value = value || (Math.random() > 0.5 ? 'foo' : 'bar');

因为在您的代码中使用JS进行检查

`if(value || Math.random() > 0.5){
_value = 'foo';
}else{
_value ='bar'
}`

答案 4 :(得分:0)

构造const a = b || c是常见的Javascript简写。这意味着:

如果b不是 fassy ,请将其分配给a。否则,将c分配给a

它也可以写为const a = b ? b : c;

const a;
if (b) a = b;
else a = c;

通常说来,如果它为空或值为零,则为 falsy