javascript内联if变量赋值,如php

javascript内联if变量赋值,如php,javascript,php,ternary-operator,Javascript,Php,Ternary Operator,您好,在php中,我可以这样做: $value = 0; $test = $value === 0 ? 'it is zero!' : 'It is not zero.'; echo $test; 如果不使用经典的if-else if语句,如何在javascript中像在php中那样一行完成这一点?它仍然在javascript中工作 value = 0; var test = (value === 0 ? 'it is zero!' : 'It is not zero.'); console.

您好,在php中,我可以这样做:

$value = 0;
$test = $value === 0 ? 'it is zero!' : 'It is not zero.';
echo $test;

如果不使用经典的
if-else if
语句,如何在javascript中像在php中那样一行完成这一点?

它仍然在javascript中工作

value = 0;
var test = (value === 0 ? 'it is zero!' : 'It is not zero.');
console.log(test);
输出

it is zero!

它仍然在javascript中工作

value = 0;
var test = (value === 0 ? 'it is zero!' : 'It is not zero.');
console.log(test);
输出

it is zero!
这应该起作用:

var value = 0;
var test = (value === 0) ? 'It is zero' : 'It is not zero!';
console.log(test);
顺便说一下,它被称为三元运算符

这应该有效:

var value = 0;
var test = (value === 0) ? 'It is zero' : 'It is not zero!';
console.log(test);

顺便说一下,它被称为三元运算符

几乎完全一样

var value = 0;
var test = (value === 0) ? 'it is zero!' : 'it is not zero';
console.log(test);
输出:

"it is zero!"

几乎完全一样

var value = 0;
var test = (value === 0) ? 'it is zero!' : 'it is not zero';
console.log(test);
输出:

"it is zero!"

除了你的美元变成了var之外,没有什么大的区别

我总是喜欢用三进制表示内联。我个人觉得它更可读

var test =(value===0)?'it is zero!':'It is not zero.';
console.log("test check==="+test)

演示:

除了您的美元变为var之外,没有其他重大区别

我总是喜欢用三进制表示内联。我个人觉得它更可读

var test =(value===0)?'it is zero!':'It is not zero.';
console.log("test check==="+test)

演示:

Javascript还支持三元运算符


Javascript还支持三元运算符


我可以在JS中为您做得更好:

var value = 0;
console.log(value === 0 ? 'It is zero!' : 'it is not zero');
甚至更短:

console.log('it is ' + ((value = 0) === 0 ? '':'not ') + 'zero!');
砰的一声,你的3行php代码中只有一行。请注意,如果
value
不存在,这将导致抛出错误(在严格模式下),或创建隐含的全局变量。
但是,如果变量
已经存在,则所有操作都非常正常,并且行为与您预期的一样:

var value = 0;
console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
//logs it is zero
value = 123;
console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
//logs it is not zero
我用iLife测试了这一点:

(function(value)
{//logs it is zero
    console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
}());
    (function(value)
{//logs it is not zero
    console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
}(123));
(function(value)
{//logs it is zero
    console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
}(0));
要避免loggin
中的代码,当值未定义时,它为零,或为falsy:

(function(value)
{//coerce to numbner
    console.log('it is ' + (value === 0 || value === '0' ? '':'not ') + 'zero!');
}());

如果
'0'
0
,则只记录
为零。对于像
false
未定义
null

这样的值,它不起作用。我可以在JS中做得更好:

var value = 0;
console.log(value === 0 ? 'It is zero!' : 'it is not zero');
甚至更短:

console.log('it is ' + ((value = 0) === 0 ? '':'not ') + 'zero!');
砰的一声,你的3行php代码中只有一行。请注意,如果
value
不存在,这将导致抛出错误(在严格模式下),或创建隐含的全局变量。
但是,如果变量
已经存在,则所有操作都非常正常,并且行为与您预期的一样:

var value = 0;
console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
//logs it is zero
value = 123;
console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
//logs it is not zero
我用iLife测试了这一点:

(function(value)
{//logs it is zero
    console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
}());
    (function(value)
{//logs it is not zero
    console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
}(123));
(function(value)
{//logs it is zero
    console.log('it is ' + ((value = value || 0) === 0 ? '':'not ') + 'zero!');
}(0));
要避免loggin
中的代码,当值未定义时,它为零,或为falsy:

(function(value)
{//coerce to numbner
    console.log('it is ' + (value === 0 || value === '0' ? '':'not ') + 'zero!');
}());

如果
'0'
0
,则只记录
为零。它不适用于
false
undefined
null

三元数只是
if-else
的缩写,基本上…在web上有很多地方可以看到…三元数只是
if-else
的缩写,基本上…在web上有很多地方可以看到…@panagiotisgoreratisas:第二行只会在控制台中给出一个错误,因为它包含一个
var
声明。控制台eval的代码以不允许的方式显示。尝试
console.log('it is'+((value=0)==0?'':'not')+'zero!')console.log('it is'+((value=1)==0?'':'not')+'zero!')将记录“它不是零”@Panagiotisgorgeraditsas:什么错误,请指定。。。它对我来说很好(chromium+node.js+firefox)。如果这产生了一个错误,我想知道是哪一个,为什么,这样我就可以纠正我的错误,也许还能学到一两个语法错误:意外标记var@PanagiotisGeorgeRaditsas:你说得对,我没有正确检查,我在node.js上运行的代码没有包含
var
关键字。。。我使用了一个IIFE:
(函数(值){console.log('It is'+((值=0)==0?''not')+'zero!');}())
@panagiotisgorgeraditsas:第二行只会在控制台中给出一个错误,因为它包含一个
var
声明。控制台eval的代码以不允许的方式显示。尝试
console.log('it is'+((value=0)==0?'':'not')+'zero!')console.log('it is'+((value=1)==0?'':'not')+'zero!')将记录“它不是零”@Panagiotisgorgeraditsas:什么错误,请指定。。。它对我来说很好(chromium+node.js+firefox)。如果这产生了一个错误,我想知道是哪一个,为什么,这样我就可以纠正我的错误,也许还能学到一两个语法错误:意外标记var@PanagiotisGeorgeRaditsas:你说得对,我没有正确检查,我在node.js上运行的代码没有包含
var
关键字。。。我使用了一个IIFE:
(函数(值){console.log('It is'+((值=0)==0?''not')+'zero!');}())
它在fiddle上工作,但第二个变量不需要,并导致错误它在fiddle上工作,但第二个变量不需要,并导致错误