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'
。如果0
是data.key
的有效值,这可能不是您想要的。以上是关于Javascript 是不是支持 PHP 中的短三元(更确切地说,变体)?的主要内容,如果未能解决你的问题,请参考以下文章