“undefined”和undefined有什么区别?

时间:2011-04-14 12:32:28

标签: javascript

我在Chrome控制台中尝试此测验:Quiz

我可以在尝试之后稍微解释一下。但有一件事让我困惑:

var x = [typeof x, typeof y][1];
    typeof typeof x;

....返回"字符串",这对我没有任何意义。

var x = [typeof x, typeof y][1]; 

返回"未定义"

typeof "undefined"

返回"字符串",这有点意义,因为undefined在引号中。但总的来说,我没有看到" undefined"的目的。与undefined共存那么,那是什么样的数组语法? " Javascript The Good Parts"说没有多维数组。

5 个答案:

答案 0 :(得分:33)

    在大多数情况下,
  1. undefined实际上是window.undefined这只是一个变量
  2. window.undefined发生未定义,除非有人定义undefined = 1而typeof undefined"number")。
  3. typeof运算符始终返回字符串,描述值的类型。
  4. typeof window.undefined再次给你"undefined" - 只是一个字符串。
  5. typeof "undefined"提供"string",就像typeof "foo"一样。
  6. 因此,typeof typeof undefined"string"

  7. 关于这种语法:

    [1, 2][1];
    

    这不是一个多维数组 - 它只是先创建一个数组arr = [1, 2],然后从中选择元素1:arr[1]

答案 1 :(得分:3)

undefined是一个默认情况下未定义的全局。

typeof返回一个描述对象类型的字符串。

所以:

 [typeof x, typeof y][1];
 [typeof undefined, typeof undefined][1];
 ["undefined", "undefined"][1];
 "undefined"

 typeof "undefined" == "string"
 typeof undefined == "undefined"
 typeof 1 == "number"
 typeof {} == "object"
  

此外,那是什么类型的数组语法?

它是一个末尾带有[1]的数组文字,因此它返回索引为1的对象。

  

“Javascript The Good Parts”表示没有多维数组。

没有,但是数组可以包含其他数组。但这不是。

答案 2 :(得分:1)

"undefined"是一个字符串(文字),未定义是ehr ... undefined

var x = [typeof x, typeof y][1]应该返回字符串"undefined"(来自typeof y)。现在,如果您要求typeof "undefined",则返回字符串"string"。如果你要求typeof "string"它(再次)返回"string"当然。

可以肯定地说typeof [anything]总是返回一个字符串(文字),所以typeof typeof something总是“字符串”。

答案 3 :(得分:1)

哇,这是一个难以解释的问题。 “typeof”运算符返回一个字符串,描述其操作数的类型。所以:

typeof undefined

返回字符串“undefined”和

typeof typeof undefined

返回字符串“string”,这是字符串“undefined”的类型。我认为这很令人困惑,因为undefined既是一种类型又是一种价值。

第二部分:JavaScript中确实没有多维数组(如此)。在这个表达式中:

var x = [typeof x, typeof y][1];

第一组方括号是由2个元素组成的数组文字。第二组方括号引用该数组的元素1(类型为y)。所以表达式实际上等同于:

var x = typeof y;

答案 4 :(得分:1)

  1. [typeof x, typeof y]是包含["string", "number"]["undefined", "undefined"]之类内容的常规数组,具体取决于xy的类型。
  2. x = ["string", "number"][1]获取该数组的第二个元素,并将其分配给x
  3. typeof x会将x的类型作为字符串"string"返回。
  4. typeof "string""string"
  5. 至于"undefined"undefined之间的区别是:一个是字符串,另一个是对象。 typeof始终将变量的类型作为字符串返回,因为您可以将undefined重新定义为其他内容,以便您无法正确比较它,但"undefined" == "undefined"始终为真。