我在jQuery.form.js源代码中看到了这一行:
g && $.event.trigger("ajaxComplete", [xhr, s]);
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是wtf ??
我的下一个想法是,我无法确定这是丑陋还是优雅.
我不是一个Javascript大师,所以我的问题是2倍.首先,我想确认我理解正确.以上行是否相当于:
if (g) {
$.event.trigger("ajaxComplete", [xhr, s]);
}
Run Code Online (Sandbox Code Playgroud)
其次是Javascript中常见/接受的做法?一方面它很简洁,但另一方面,如果你以前没见过它,它可能有点神秘.
我无法找到规范的相关部分来回答这个问题.在Java中的条件运算符语句中,是否评估了true和false参数?
因此,以下内容可能会抛出NullPointerException
Integer test = null;
test != null ? test.intValue() : 0;
Run Code Online (Sandbox Code Playgroud) 我有多个昂贵的函数返回结果.如果所有检查都成功,我想返回所有检查结果的元组.但是,如果一次检查失败,我不想调用后面的检查,如短路行为and.我可以嵌套if语句,但是如果有很多检查,这将失控.如何and在保存结果供以后使用的同时获得短路行为?
def check_a():
# do something and return the result,
# for simplicity, just make it "A"
return "A"
def check_b():
# do something and return the result,
# for simplicity, just make it "B"
return "B"
...
Run Code Online (Sandbox Code Playgroud)
这不会短路:
a = check_a()
b = check_b()
c = check_c()
if a and b and c:
return a, b, c
Run Code Online (Sandbox Code Playgroud)
如果有很多检查,这很麻烦:
if a:
b = check_b()
if b:
c = check_c()
if c:
return a, b, …Run Code Online (Sandbox Code Playgroud) 我已经厌倦了PHP对"短三元"的支持,省略了第二个表达式:
// PHP
$foo = 'hello';
$bar = '';
echo $foo ?: 'world'; // hello
echo $bar ?: 'world'; // world
Run Code Online (Sandbox Code Playgroud)
Javascript是否支持这样的语法?我试过?:导致语法错误.我知道布尔短路,但这对我目前正在做的事情是不可行的; 那是:
// Javascript
var data = {
key: value ?: 'default'
};
Run Code Online (Sandbox Code Playgroud)
有什么建议?(我可以将它包装在一个立即调用的匿名函数中,但这看起来很愚蠢)
在PHP中,以下内容(基于JS样式)相当于:
echo $post['story'] || $post['message'] || $post['name'];
Run Code Online (Sandbox Code Playgroud)
所以,如果故事存在,那么发布; 或者如果消息存在,等等......
我有以下简单的短路语句,应该显示组件或什么都没有:
{profileTypesLoading && <GeneralLoader />}
如果该语句为false,则呈现0而不是任何内容.
我已经做了一个console.log(profileTypesLoading)公正的事情来快速查看该profileTypesLoading属性的状态,并且它是预期的1或0.0应为false ...导致无法渲染.对?
知道为什么会这样吗?
我很好奇为什么逗号<,>是一个快捷方式and而不是andalso保护测试.
由于我称自己为"C native",我没有看到短路布尔评估的任何缺点.
我使用to_core标志编译了一些测试代码,以查看实际生成的代码.使用逗号,我看到左手值,右边和值得到评估,并且两者都是和.随着andalso你的情况下块内的情况下块,并没有呼叫erlang:and/2.
我没有进行基准测试,但我敢说andalso变体是更快的.
下面有两个if语句,它们使用逻辑运算符有多个条件.逻辑上两者都相同,但检查顺序不同.第一个工作,第二个工作失败.
我引用了MSDN来检查是否定义了执行条件的顺序; 但我找不到.
考虑具有&&逻辑运算符的多重检查条件.是否保证始终检查第一个条件,如果不满足,则不会检查第二个条件?
我曾经使用方法1,它运作良好.寻找证明使用的MSDN参考.
UPDATE
参考"短路"评估
码
List<string> employees = null;
if (employees != null && employees.Count > 0)
{
string theEmployee = employees[0];
}
if (employees.Count > 0 && employees != null)
{
string theEmployee = employees[0];
}
Run Code Online (Sandbox Code Playgroud) 给定一个布尔值的容器(例如std::vector<bool>),是否存在标准函数,true如果所有值都是true("和")或者true至少有一个值是true("或"),则返回短路评估?
今天早上我在www.cplusplus.com上挖了一个但是找不到任何东西.
我知道,||并&&在C#中被定义为短路运营商,这种行为是由语言规范保证,但做|=和&=短路呢?
例如:
private bool IsEven(int n)
{
return n % 2 == 0;
}
private void Main()
{
var numbers = new int[] { 2, 4, 6, 8, 9, 10, 14, 16, 17, 18, 20 };
bool allEven = true;
bool anyOdd = false;
for (int i = 0; i < numbers.Length; i++)
{
allEven &= IsEven(numbers[i]);
anyOdd |= !IsEven(numbers[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
当9条目被命中时,allEven变为false,这意味着所有后续条目都是无关紧要的 - allEven对于将来对该表达式的所有调用,该值保证为false.同样如此anyOdd,当它看到9时设置为true,并且对于该表达式的所有后续调用将保持为true.
那么,做&= …
short-circuiting ×10
c# ×2
javascript ×2
php ×2
.net ×1
algorithm ×1
boolean ×1
c++ ×1
components ×1
conditional ×1
erlang ×1
java ×1
python ×1
reactjs ×1
std ×1