)变量赋值说明

鉴于这段JavaScript的片段......

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f = a || b || c || d || e;

alert(f); // 4

有人可以向我解释这种技术被称为什么(我最好的猜测是在这个问题的标题!)? 以及如何/为什么它的工作原理?

我的理解是,变量f将被赋予第一个变量的最接近的值(从左到右),该变量的值不是null或未定义,但我没有设法找到关于此技术的很多参考资料,已经看到它用了很多。

此外,这种技术特定于JavaScript? 我知道在PHP中做类似的事情会导致f有一个真正的布尔值,而不是d本身的值。


有关解释请参见短路评估。 这是实施这些运营商的常用方式; 它不是JavaScript独有的。


这是为了分配一个默认值,在这种情况下是y的值,如果x变量是虚假的。

JavaScript中的布尔运算符可以返回一个操作数,并不总是像其他语言一样的布尔结果。

逻辑OR运算符( || )返回第二个操作数的值,如果第一个操作数是虚假的,否则返回第一个操作数的值。

例如:

"foo" || "bar"; // returns "foo"
false || "bar"; // returns "bar"

Falsy值是那些在布尔上下文中强制为false值,它们是0nullundefined ,一个空字符串, NaN ,当然也是false


Javacript对逻辑运算符||使用短路评估 和&& 。 但是,与其他语言不同的是,它返回暂停执行的最后一个值的结果,而不是true值或false值。

以下值在JavaScript中被认为是虚假的。

  • 空值
  • "" (空字符串)
  • 0
  • 未定义
  • 忽略运算符优先级规则并简单起见,以下示例显示哪个值暂停评估,并作为结果返回。

    false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
    

    NaN的前5个值是虚假的,所以它们都从左到右进行评估,直到它满足第一个真值 - "Hello" ,这使得整个表达式成立,所以更多的东西不会被评估, "Hello"会得到作为表达的结果返回。 同样,在这种情况下:

    1 && [] && {} && true && "World" && null && 2010 // null
    

    前5个值都是真实的,并且被评估,直到它满足使表达式为假的第一个falsy值( null ),所以2010不再被评估,并且由于表达式返回null

    你给出的例子是利用这个JavaScript属性来执行任务。 它可用于任何需要在一组数值中获得第一个真值或伪值的地方。 下面的代码将为b赋值"Hello" ,因为它可以更容易地分配默认值,而不是执行if-else检查。

    var a = false;
    var b = a || "Hello";
    

    你可以调用下面的例子来利用这个特性,我相信它会让代码更难阅读。

    var messages = 0;
    var newMessagesText = "You have " + messages + " messages.";
    var noNewMessagesText = "Sorry, you have no new messages.";
    alert((messages && newMessagesText) || noNewMessagesText);
    

    在警报内部,我们检查messages是否是虚假的,如果是,则评估并返回noNewMessagesText ,否则计算并返回newMessagesText 。 由于在这个例子中它是虚假的,我们在noNewMessagesText处停下来并提醒"Sorry, you have no new messages."

    链接地址: http://www.djcxy.com/p/17051.html

    上一篇: ) variable assignment explanation

    下一篇: Namespacing issue in Javascript