【问题标题】:javascript inline if variable assign value like php [closed]如果变量像php一样赋值,则javascript内联[关闭]
【发布时间】:2013-11-18 23:43:05
【问题描述】:

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

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

如果不使用经典的if - else if 语句,如何在 javascript 中像在 php 中一样在 1 行中完成此操作?

【问题讨论】:

标签: javascript php ternary-operator


【解决方案1】:

我可以在 JS 中做得更好:

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

甚至更短:

console.log('it is ' + ((value = 0) === 0 ? '':'not ') + 'zero!');

Bang,你的 3 行 php 一行。请注意,如果value 不存在,此 导致抛出错误(在严格模式下)或创建隐含的全局变量。
但是,如果变量 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

我使用 IIFE 对此进行了测试:

(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));

当值未定义或错误时,避免来自登录it is zero 的代码:

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

这只会在value'0'0 时记录it is zero。它不适用于falseundefinednull...等值。

【讨论】:

  • @PanagiotisGeorgeRaditsas:第二行只会在控制台报错,因为它包含var 声明。控制台 eval 的代码以这种方式是不允许的。试试console.log('it is ' + ((value = 0) === 0 ? '':'not ') + 'zero!');,你会发现它工作得很好,就像console.log('it is ' + ((value = 1) === 0 ? '':'not ') + 'zero!'); 会记录“它不为零”
  • @PanagiotisGeorgeRaditsas:什么错误,请说明...它对我来说很好用(铬 + node.js + firefox)。如果这产生了错误,我想知道是哪个错误以及为什么,这样我就可以纠正我的错误,也许还能学到一两件事
  • SyntaxError: Unexpected token var
  • @PanagiotisGeorgeRaditsas:你说得对,我没有正确检查,我在 node.js 上运行的代码不包含 var 关键字...我使用了 IIFE:@987654340 @
【解决方案2】:

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

documentation

我总是更喜欢内联的三进制。我个人觉得它更易读。

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

演示:http://jsfiddle.net/jayeshjain24/efLYf/

【讨论】:

  • 它适用于小提琴,但不需要第二个 var 并导致错误
【解决方案3】:
(value == 0)?alert('it is zero!'):alert('It is not zero.');

【讨论】:

    【解决方案4】:
    【解决方案5】:

    几乎一模一样。

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

    输出:

    "it is zero!"
    

    【讨论】:

      【解决方案6】:

      这应该可行:

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

      顺便说一下,它被称为三元运算符。 Many languages support them.

      【讨论】:

        【解决方案7】:

        它仍然可以在 javascript 中工作

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

        输出

        it is zero!
        

        【讨论】:

          猜你喜欢
          • 2014-02-26
          • 2016-11-21
          • 1970-01-01
          • 2012-11-17
          • 2015-08-11
          • 2018-03-13
          • 2011-07-24
          • 2016-03-26
          • 2014-10-31
          相关资源
          最近更新 更多