-6

PHP中的打印或回显结果可以是数字值还是始终是字符串。例如:

这是PHP代码:

<?php
    $num = 10;
?>

这是JS代码:

function isLarge(number)
{
    var s = document.getElementById("test").value;
    if (s > number)
    {
        window.alert("to large");
        return false;
    }
     return true;
}

这是我的另一个 PHP:

<input type="text" id=""test>
<input type="button" value="click" onclick="isLarge('<?php print $num?>')">

如果我运行它,我的结果是不正确的。我认为这print $num是给我一个字符串值的数字,不能与数字进行比较。

4

5 回答 5

3

PHP 为您提供 的字符串表示形式10,它也是10. 但是,您的 JS 代码将此嵌入引号内,使其成为 JS字符串值。由于.value输入元素的属性也是一个字符串,所以 JS 最终会将两个“数字”作为字符串进行比较,可能会给您带来意想不到的结果。

考虑在 JavaScript 中:

2 > 10       ===> false (numeric comparison)
"2" > 10     ===> false ("2" converted to number)
2 > "10"     ===> false ("10" converted to number)
"2" > "10"   ===> true (string comparison!)

如果要比较数字,则比较的两个操作数中至少有一个必须是数字。

要将 转换.value为数字,请使用parseInt

var s = parseInt(document.getElementById("test").value, 10);

要将 PHP 变量转换为数字,您可以简单地丢失 PHP 回显周围的引号:

onclick="isLarge(<?php print $num?>)"

$num但是,如果不是数字,这可能会导致解析错误。使用防弹解决方案会更好:json_encode确保$num安全过渡到 JS-land 的值,然后parseInt将其设为数字​​:

onclick="isLarge(parseInt(<?php print json_encode($num);?>, 10))"

使用上述技术,最坏的情况是如果$num是垃圾,你最终会调用isLarge(0).

于 2013-05-29T13:49:17.933 回答
1

我在 PHP 中没有看到任何错误,但在 HTML 中看到了双引号:

<input type="text" id=""test>
于 2013-05-29T13:47:14.837 回答
1

我认为 print $num 给了我一个字符串值的数字,不能与数字进行比较。

PHP 是一种松散类型的语言。这意味着您可以交叉比较不同类型的值。如果你想确保传递正确的类型,那么你应该===在你的 JS 代码中使用操作符。

Echo 将值打印为String. 您可以将该值解释为数字。输出周围的单引号也告诉 JS 将此值解释为string.

于 2013-05-29T13:47:18.913 回答
1

与PHP无关

onclick="isLarge('<?php print $num?>')

您将值作为字符串传递给 Javascript 函数。注意'单引号。

如果您想作为数字进行比较,请删除'

于 2013-05-29T13:48:16.323 回答
1
onclick="isLarge('<?php print $num?>')"

结果是:

onclick="isLarge('10')"

'10' in Javascript是一个字符串,因为您将它放在Javascript 中的引号中

PHP输出没有任何特定类型,但它基本上是一个字符串。它真正取决于的是下一个读取此输出的实体如何解释它。

于 2013-05-29T13:49:06.457 回答