Javascript:||变量赋值的运算符

时间:2015-03-05 07:16:32

标签: javascript

我有两个小例子代码:

// example 1:
var x;
...
x = x || 'some value'; //assign some value to x if x has no value
...

// example 2:
var y;
...
y || (y = 'some value'); //assign some value to y if y has no value
...

我的问题是:
1.当x已经有值时,x会在示例1中重新分配它的值吗? 2.示例2比示例1更好吗?

(我的英语不好。感谢您的阅读和回答:D)

3 个答案:

答案 0 :(得分:2)

  1. 是。如果x具有真值,则会将其分配回自身。如果没有,则会为其分配默认'some value'
  2. 示例2中可能会有微小的性能优势,但示例1是标准习惯用法。与其他程序员保持一致非常有用,因为他们可以更轻松地理解您的代码。除非您在大型循环中进行大量默认值初始化,否则性能增益应该可以忽略不计。

答案 1 :(得分:1)

x只会重新分配它的值,因为它已经有值

    var x = 'foo';
    x = x || 'some value';
  //  result: x = 'foo' //reassigned the value of x
  • 就可读性而言,我更喜欢example1

答案 2 :(得分:-1)

在示例1中,javascript将第一次传递值undefined分配给x。 在第二遍(当你的代码运行时) x在行

处未定义值

var x;

然后||运算符如下。考虑一下:

左||右

if(left未定义(全局解析为true),然后返回左侧 否则返回

所以是的,一个值将被重新分配给x(x本身或1) 当x解析为未定义,或运算符正确解析,然后将1分配给x。 所以x = x || 1,以x的值结束=== 1

第二个例子 不,它增加了简单的逻辑(但仍然有效)