Javascript 是不是支持 PHP 中的短三元(更确切地说,变体)?

Posted

技术标签:

【中文标题】Javascript 是不是支持 PHP 中的短三元(更确切地说,变体)?【英文标题】:Does Javascript support the short ternary (rather, variation of) as in PHP?Javascript 是否支持 PHP 中的短三元(更确切地说,变体)? 【发布时间】:2011-11-16 16:48:24 【问题描述】:

我喜欢 php 对“短三元”的支持,省略了第二个表达式:

// PHP

$foo = 'hello';
$bar = '';

echo $foo ?: 'world'; // hello
echo $bar ?: 'world'; // world

javascript 是否支持这样的语法?我试过?: 导致语法错误。我知道布尔短路,但这对于我目前正在做的事情是不可行的;那就是:

// Javascript

var data = 
    key: value ?: 'default'
;

有什么建议吗? (我可以将它包装在一个立即调用的匿名函数中,但这似乎很愚蠢

【问题讨论】:

@NullUserException - 我正在使用 jQuery,当我 缓存我的选择时,非默认值是调用 .data() 的结果,而我只是想避免使用建议的语法进行第二次调用(并避免将值存储在临时变量中 【参考方案1】:
var myFunc = function(foo) 
  foo = foo || 'my default value for foo';

【讨论】:

【参考方案2】:

是的,使用||。与 PHP 不同,JavaScript 的 || 运算符将返回第一个非假值,而不是标准化布尔值。

foo || 'world'

【讨论】:

感谢@jimbojw - SomeGuy 打败了你 :) 是的,好吧,这就是我为解释它而付出的代价,而不仅仅是写答案。 是的,我已经把它删掉了——同意这太可怕了。 比接受的答案更好的解释;谢谢。【参考方案3】:
var data = 
    key: value || 'default'
;

【讨论】:

漂亮!谢谢@SomeGuy - 不过这看起来很奇怪,Javascript(read,any language)会从这样的比较中返回一个非布尔值。我的意思是,我知道它的类型很松散,但是太糟糕了。 @Bracketworks:布尔运算符在许多(尤其是函数式)语言中不返回布尔值。他们只会返回运算符的一侧(或false)。 @NikiC - 谢谢,不知道这一点;除了Javascript之外还有什么例子吗?我只是好奇。 @Bracketworks:我想到了 Python 和 Lisp。虽然可能更多,但我只是不知道那么多语言;) 请记住,这可能并不总是按预期工作。例如,如果value = 0,则data.key 将评估为'default'。如果0data.key 的有效值,这可能不是您想要的。

以上是关于Javascript 是不是支持 PHP 中的短三元(更确切地说,变体)?的主要内容,如果未能解决你的问题,请参考以下文章

php中的短标签 太坑人了

php PHP中的短代码

php 允许产品摘录中的短代码

php 允许产品摘录中的短代码

php 允许产品摘录中的短代码

PHP WordPress模板中的短代码