为什么Javascript警报只弹出数字而不弹出字符串?


Why does Javascript alert pops up only numbers and not strings?

谁能帮我理解一下原因:

<?php $x = 'b'; ?>
<script> var v=<?php echo $x;?>;  alert(v);</script>

不弹出警告,而

<?php $x = '3'; ?>
<script> var v=<?php echo $x;?>;  alert(v);</script>

会弹出一个带有文本3的警告吗?

您将单个字母b回显到脚本元素中,结果是:

<script> var v=b;  alert(v);</script>

就JavaScript而言,这是一个标识符,而不是字符串。由于没有定义JavaScript变量b,因此会发生错误,并且不会发出任何警告。

当你回显3时:

<script> var v=3;  alert(v);</script>

JavaScript看到的是一个数字字面量3,它没有问题分配和警告。

始终查看渲染输出

<script> var v = 3; alert(v); </script>

<script> var v = b; alert(v); </script>

要可靠地将PHP变量传递到JavaScript中,使用json_encode

尝试:

<?php $x = '3'; ?>
<script> var v='<?php echo $x;?>';  alert(v);</script>

基本上PHP代码在页面加载之前在服务器端运行,Javascript在页面中的脚本加载后开始执行。

所以根据你的代码

<?php $x = 'b'; ?>
<script> var v=<?php echo $x;?>;  alert(v);</script>

当该代码在服务器端被解析时,php值将被填充到脚本标记中。

就像

<script> var v=b;  alert(v);</script>

现在,当页面在客户端呈现时。一旦这一行被执行,javascript开始查找变量b。对于PHP来说,它是一个字符串,但对于javascript来说,它是一个变量,因为它没有被双引号括起来。

由于javascript没有找到任何名为b的变量,因此抛出b is undefined错误。

现在说到数字:

<?php $x = '3'; ?>
<script> var v=<?php echo $x;?>;  alert(v);</script>

在客户端,这将呈现为

<script> var v=3;  alert(v);</script>

现在它只是一个数字而不是一个变量。Javascript不会抛出任何错误。

如果你想让字符串在javascript中工作,那么

在PHP变量

中为b添加引号
    <?php $x = '"b"'; ?>
    <script> var v=<?php echo $x;?>;  alert(v);</script>
现在即使是PHP字符串也会给出alert

您生成的javascript缺少封闭引号或文字值。因此,赋值var v=...遇到一个错误,除非赋值是一个数字。

使用

<script> var v="<?php echo $x;?>";  alert(v);</script>

显示所有输出(但要注意$x中的双引号)。