Rob Philpott Ответов: 3

Почему typeof() дает мне странные результаты?


Добрый день, типы JavaScript. У меня есть простой вопрос, который, возможно, вы могли бы объяснить моему тупому мозгу.

console.log(typeof(100));
выводит "число". Ну, конечно, это так.

console.log(typeof(100).toString());
выводит 'string'. Теперь я в замешательстве, но если я сделаю это:

console.log((typeof(100)).toString());
Я снова возвращаюсь к "номеру". Эти последние две вещи идентичны в соответствии с моими глазами C#, так что явно есть что-то, вероятно, довольно простое, что я здесь упускаю. Почему во втором примере выводится "строка"?

Что я уже пробовал:

Я возражаю против того, чтобы меня заставляли рассказывать о том, что я пробовал.

3 Ответов

Рейтинг:
8

Estys

typeof - это не функция, а оператор.

пробовать :
для вызова typeof 100
typeof 100.toString() // ошибка
typeof (100).toString()


Рейтинг:
18

MadMyche

Я понимаю, что это сбивает с толку; простое объяснение заключается в том, что это порядок операций, и преобразование типа выполняется до оценки типа.

Я разделил его, чтобы показать вам, как это оценивается в ваших последних 2 строках кодов

console.log( typeof         (100).toString()  );
console.log( (typeof(100))  .toString()       );


Рейтинг:
0

Rob Philpott

Правильно, ответил на мой собственный вопрос. Второй из них является эквивалентом

console.log(typeof ((100).toString()))

Потому что в JavaScript скобки кажутся необязательными при использовании typeof. Я думаю, что мне нужно ведро, чтобы меня стошнило.


Richard Deeming

Да - typeof это оператор, а не функция. :)
typeof - JavaScript | MDN[^]

Rob Philpott

Возможно, это просто ритуал или отрывок для тех, кто приходит в JavaScript с правильных языков, но это действительно заставляет меня чувствовать себя довольно плохо.

Richard Deeming

Подождите, пока вы не начнете пытаться понять, что именно this указывает на. :)

это - JavaScript | MDN[^]

OriginalGriff

Добро пожаловать в ад - на твоем месте я бы сейчас побежал к дверям ...