Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个赋值结构叫什么?你能用Php实现吗?_Javascript_Expression_Variable Assignment_Logical Operators - Fatal编程技术网

Javascript 这个赋值结构叫什么?你能用Php实现吗?

Javascript 这个赋值结构叫什么?你能用Php实现吗?,javascript,expression,variable-assignment,logical-operators,Javascript,Expression,Variable Assignment,Logical Operators,我经常在Javascript中使用以下构造: var foo = other_var || "default_value"; 在Javascript中,如果左侧为falsy,则分配右侧的值 它非常方便,并且可以避免编写更长的、不必要的显式三元表达式 这种构造有名字吗 奖励:在Php中有没有一个不使用三元运算符的技巧 PS:另一种变体是,如果没有获得真实值,则抛出错误,而不是给出默认值: var foo = something || alert("foo is not set!"); 我相信这

我经常在Javascript中使用以下构造:

var foo = other_var || "default_value";
在Javascript中,如果左侧为falsy,则分配右侧的值

它非常方便,并且可以避免编写更长的、不必要的显式三元表达式

这种构造有名字吗

奖励:在Php中有没有一个不使用三元运算符的技巧

PS:另一种变体是,如果没有获得真实值,则抛出错误,而不是给出默认值:

var foo = something || alert("foo is not set!");

我相信这就是所谓的OR结构。这里有很多使用作业的好例子: 是的。有关javascript中的更多信息,请参见链接

根据文档中的示例:

o1=true || true       // t || t returns true
o2=false || true      // f || t returns true
o3=true || false      // t || f returns true
o4=false || (3 == 4)  // f || f returns false
o5="Cat" || "Dog"     // t || t returns Cat
o6=false || "Cat"     // f || t returns Cat
o7="Cat" || false     // t || f returns Cat

编辑:关于奖金,您似乎可以通过执行以下操作来实现与PHP最新版本中的三元组类似的功能:

expr1 ?: expr3

由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为TRUE,则expr3返回expr1,否则返回expr3

我不熟悉PHP,所以我想知道结果

这种东西有名字吗 构造

是的

奖励:有什么诀窍可以做到这一点吗 不使用三元运算符的Php

不,使用PHP,您只能在ternay运算符的帮助下执行此操作。

此操作有效:

$mytruevalue = true;
$foo = $mytruevalue or $foo = "20";
echo $foo;
上面打印的是
“1”
,因为这是
true
的字符串表示形式(
$mytruevalue
为true)

但是,这会打印出
“20”
,因为
$myfalsevalue
为false

如果两个值都等于
false
,则不打印任何内容

希望这能有所帮助。

逻辑or(通常是
|
)运算符在许多语言中都有很大的不同

在某些情况下(如C,C++),它的工作原理是:“计算左侧;如果为真,则返回真,否则计算右侧,如果为真或假,则返回真。”这里的结果总是布尔值

在其他情况下(如Javascript、Python,我相信PHP也一样),它更像是:“计算左侧;如果是真的,则返回它,否则计算右侧并返回结果。”然后结果可以是任何类型,您可以执行以下构造:

a=(b | | c);//相当于a=b?b:c

或者说很奇特:

function compare(A, B) { // -1 if A<B, 0 if A==B, 1 if A>B
    return B.x - A.x || B.y - A.y;
}
函数比较(A,B){/-1如果AB
返回B.x-A.x | B.y-A.y;
}

谢谢您的奖金!我确认它可以在php 5.3.2上使用shell中的一个简单的单行程序(
php-r'echo(null?:“dog”)。“\n”;
echos“dog”);而不是PHP5.2.14。Falsy值的计算方法与php empty()函数类似,因此空字符串是Falsy,但仅包含零字符的字符串也是Falsy。@faB-有趣。我对PHP一无所知(除了我今天在文档中读到的内容)。惊奇的是,它会认为“0”是法尔茜,但我想我只是习惯了JavaScript。接受你的答案(虽然所有答案都是正确的),因为它与我的观察更相关。对操作员的不同处理非常令人讨厌。我想知道是否有任何理由让它不能像Javascript中那样运行。因为我花了很多时间在前端代码上,所以我已经使用过很多次了。当然,三元运算符是有效的,但它使用逻辑OR编写的方式使代码更具可读性,更直观地写下来。谢谢大家的回答,我不得不选择一个,但都是正确的。当然,这是合乎逻辑的或:)也许“模式”这个词更能表达我困惑的观察。它非常方便,我想人们可能已经在它上面加了一个名字。对我来说,这几乎是一种模式。它可读性强,直观易懂。这几乎就像读简单的英语。Kos观察到的技巧是,它完全取决于语言如何计算逻辑OR。羞耻,又是一个例子。确保函数的不可接受结果返回false(或null等)通常很有用。但代码可能给出0或null(可能是从底层框架调用的另一个例程)。因此,您最终会得到类似于
return var|u result | false
如果代码的结果是真实的,它将按原样返回,否则根据文档或api中的一致性,您一定要返回false。但是,是的,它可以用三元运算符来完成,只是不那么酷。可能的重复嘿,这很有趣,我会研究一下。哦,我明白了。呵呵。这很好,右边是作业。但我不确定这比普通的三元运算符更可取。由于评估顺序的不同,这可能会导致更多的隐蔽性错误,并且会有额外的任务。因为逻辑运算符的纯英语版本,你让我一时糊涂了。实际上,两边都是赋值。不过,我完全同意,三元运算符是PHP的最佳选择。
function compare(A, B) { // -1 if A<B, 0 if A==B, 1 if A>B
    return B.x - A.x || B.y - A.y;
}