8

我的假设后跟基于假设的问题:

Javascript 有nullundefined. 您可以将变量设置为null,表示它没有值,或者您可以将其设置为undefined,表示不知道它是否有值 - 它根本没有设置。

PHP has null,到目前为止,我使用的方式与null在 Javascript 中使用的方式相同。PHP 是否具有等价物undefined

4

5 回答 5

7

不是真的,undefined在 PHP 中没有对应物。将 JSundefined与 PHP进行比较null并不能真正叠加,但它与您将要得到的一样接近。在这两种语言中,您都可以分配这些值/非值:

var nothingness = undefined;
$nothing = null;

并且,如果您声明了一个变量,但没有为其分配任何内容,那么 JS 会将 var 解析为undefined,而 PHP 会解析(或分配)该变量null

var nothingness;
console.log(nothingness === undefined);//true

$foo;
echo is_null($foo) ? 'is null' : '?';//is null

但是要小心isset

$foo = null;
//clearly, foo is set:
if (isset($foo))
{//will never echo
    echo 'foo is set';
}

知道变量是否存在的唯一真正get_defined_vars方法,AFAIK,是使用:

$foo;
$bar = null;
$defined = get_defined_vars();
if (array_key_exists($defined, 'foo'))
{
    echo '$foo was defined, and assigned: '.$foo;
}
于 2013-07-01T07:05:56.220 回答
4

我不认为有undefined。而不是检查某些东西是否undefined与 JavaScript 中的一样:

if(object.property === undefined) // Doesn't exist.

您只需使用isset()

if(!isset($something)) // Doesn't exist.

另外,我觉得你的理解undefined有点奇怪。您不应该属性设置为undefined,这是不合逻辑的。您只想检查某些内容是否未定义,这意味着您尚未在范围内的任何地方定义它。isset()遵循这个概念。

也就是说,您可以使用unset()我认为与将某些内容设置为undefined.

于 2013-07-01T06:54:04.703 回答
0

不,它只有“未设置”,实际上根本不是一个值。

于 2013-07-01T06:51:58.220 回答
0

undefined是您在尝试访问不存在的属性/变量时将在 Javascript 中获得的值。您通常不会某些内容设置为undefined.

PHP 没有这种机制。如果您尝试访问不存在的属性或变量,则会触发 level 的错误E_NOTICE。脚本将继续,但不存在的变量的值将替换为null.

在 Javascript 中,您尝试访问一个变量并测试您是否获得了它undefined
在 PHP 中,您可以isset($var)在访问变量之前测试它是否存在。

于 2013-07-01T07:03:00.333 回答
0

在某些情况下,这null是一个有效值,并且需要一些其他数据类型来表示操作的结果。

例如,我有一个函数可以获取复杂/嵌套数组中某个键的值。键值可以是任何东西(包括null)。如果密钥路径无效,在这种情况下我应该返回什么?返回null, false,-1等没有任何意义,因为键值可能是其中之一。

我决定定义一个常量:

define("undefined", "__undefined__");
...
$value = getKeyValue($options, ["section", "subsection", "opt2"]);
if ($value != undefined) {
    ...
}
于 2021-10-13T14:01:41.420 回答