我在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"说没有多维数组。
答案 0 :(得分:33)
undefined
实际上是window.undefined
。 这只是一个变量。window.undefined
发生未定义,除非有人定义typeof undefined
将"number"
)。typeof
是运算符,始终返回字符串,描述值的类型。typeof window.undefined
再次给你"undefined"
- 只是一个字符串。typeof "undefined"
提供"string"
,就像typeof "foo"
一样。typeof typeof undefined
会"string"
。关于这种语法:
[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)
[typeof x, typeof y]
是包含["string", "number"]
或["undefined", "undefined"]
之类内容的常规数组,具体取决于x
和y
的类型。x = ["string", "number"][1]
获取该数组的第二个元素,并将其分配给x
。typeof x
会将x
的类型作为字符串"string"
返回。typeof "string"
是"string"
。至于"undefined"
和undefined
之间的区别是:一个是字符串,另一个是对象。 typeof
始终将变量的类型作为字符串返回,因为您可以将undefined
重新定义为其他内容,以便您无法正确比较它,但"undefined" == "undefined"
始终为真。