如何使PHP布尔值FALSE只输出为FALSE

6

可能是重复问题:
如何从PHP传递变量到JavaScript中

这似乎很简单。我将一个PHP变量的值设置为false,然后经过一些处理后,我在一个脚本中输出一些JavaScript变量。下面是代码:

$a = true;
$b = false;
echo '<script type="text/javascript">
          var a = '.$a.';
          var b = '.$b.';
      </script>';

当脚本完成时,我会得到以下输出:
var a = 1;
var b = ;

我在 JavaScript 中遇到了语法错误。现在的问题是,如何将这些值作为真正的布尔值在 JavaScript 中使用?

预期输出:

var a = true;
var b = false;

我不想要像'true''false',或者 1 和 0 这样的字符串,而只需要布尔值 truefalse。请提供关于PHP为什么会这样行为的相关帮助和解释。

3
看一下JavaScript布尔值的逻辑http://www.quirksmode.org/js/boolean.html - Ron van der Heijden
在SO上有类似的问题 - https://dev59.com/VG445IYBdhLWcg3wRoPH
  • https://dev59.com/AkvSa4cB1Zd3GeqPie4o
  • http://stackoverflow.com/questions/11512705/print-false-in-php 所有这些问题都使用字符串来代替实现相同的功能。
- sascha
6个回答

9
echo '<script type="text/javascript">
          var a = '.($a?"true":"false").';
          var b = '.($b?"true":"false").';
      </script>';

我想,你不能简单地回显true/false以获得单词,你需要将其转换为字符串。


1
当你在js中输出它时,正确的方式是不加引号,这样js的值将会是一个布尔值而不是字符串。 - dano

4
使用 json_encode 函数。
$a = true;
$b = false;
echo '<script type="text/javascript">
          var a = '.json_encode($a).';
          var b = '.json_encode($b).';
      </script>';

3

另一种方法是使用var_export()函数。

echo '<script type="text/javascript">
          var a = ', var_export($a), ';
          var b = ', var_export($b), ';
      </script>';

那真是一个有趣的东西,谢谢。 - Shades88

2

将数据编码为JSON格式。

$ php
<?php
echo json_encode(true) . "\n";
echo json_encode(false) . "\n";             
true
false

1

在 PHP 端我会使用 json_encode(),在 JS 端我会使用 JSON2 来传输变量。(json2 已经包含在大多数 JS 框架中)

<?php
$js_vars = json_encode(array(
    'a' => true,
    'b' => false,
));
?>
<script>
   JS_VARS = JSON.parse('<?php print $js_vars?>');
   console.log(JS_VARS.a, JS_VARS.b);
</script>

对于单个变量也适用,但我建议将变量分组,以免污染JavaScript的全局对象。


1

我怀疑这个会起作用并且很容易添加:

($val ? "true" : "false")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接