В чем разница между "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" всегда истинно.