В чем разница между "undefined" и undefined?
Я пробую эту викторину в консоли Chrome: Quiz
Я могу объяснить большинство из них несколько после того, как попробовал их. Но меня смущает одна вещь:
var x = [typeof x, typeof y][1];
typeof typeof x;
.... возвращает "string", что для меня не имеет никакого смысла.
var x = [typeof x, typeof y][1];
возвращает "undefined"
typeof "undefined"
возвращает "string", что имеет смысл, потому что undefined был в кавычках. Но в целом я не вижу цели "undefined" в сосуществовании с undefined. Кроме того, что такое синтаксис массива? "Javascript The Good Parts" говорит, что нет многомерных массивов.
Ответы
Ответ 1
-
undefined
на самом деле window.undefined
в большинстве ситуаций. Это просто переменная.
-
window.undefined
не определяется, если кто-то не определяет его (try undefined = 1
и 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]
.
Ответ 2
undefined
по умолчанию является глобальным, 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" говорит, что нет многомерных массивов.
Нет, но массив может содержать другие массивы. Однако этого не происходит.
Ответ 3
"undefined"
- строка (литерал), undefined - это ehr... undefined
var x = [typeof x, typeof y][1]
предположительно возвращает строку "undefined"
(от typeof y
). Теперь, если вы запрашиваете typeof "undefined"
, он возвращает строку "string"
. И если вы попросите typeof "string"
Он (снова) возвращает "string"
, конечно.
Можно с уверенностью сказать, что typeof [anything]
всегда возвращает строку (литерал), поэтому typeof typeof something
всегда будет "string".
Ответ 4
Эй, это сложно объяснить. Оператор typeof возвращает строку, описывающую тип ее операнда. Итак:
typeof undefined
возвращает строку "undefined" и
typeof typeof undefined
возвращает строку "string", которая является типом строки "undefined". Я думаю, что это запутывает, потому что undefined - это тип и значение.
Вторая часть: в JavaScript нет многомерных массивов (как таковых). В этом выражении:
var x = [typeof x, typeof y][1];
Первый набор квадратных скобок представляет собой литерал массива, состоящий из двух элементов. Второй набор квадратных скобок ссылается на элемент 1 этого массива (typeof y). Таким образом, это выражение эффективно эквивалентно этому:
var x = typeof y;
Ответ 5
-
[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"
всегда истинно.