2014-12-17 2 views
0

Просто высунувшись, глядя на области, я обычно блестел и замечал это.рассуждение позади typeof ('apple') vs typeof 'apple'

typeof('apple'); //"string" 

typeof 'apple'; //"string" 

Хорошо, сначала, как работает этот второй пример? Я получаю первую функцию и параметр. Второй ли оператор, который имеет одно и то же имя, как функция? Что там происходит?

Второй вопрос: почему так? Могу ли я определить свои функции без использования()?

+3

'typeof' является оператором, а не функция. Скобки не имеют смысла, как в 'x = (1 + 2),' –

+0

[typeof] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof) - это оператора, а не функции. Вам не нужны скобки, их игнорируют. Сравните 'var a = 1' с' var a = (1) '. –

+0

Если бы не было этого плохого нерва в пальцах людей ... все просто любят добавлять лишние скобки по всему месту, особенно вокруг операнда префикса унарных операторов.Пожалуйста, нет! –

ответ

3

Ваш вопрос основан на предположении, что функция typeof является функцией. Это не! typeof - unary operator, точно так же как -, +, ~, или !.

Что происходит?

Это выражение

typeof('apple') 

является не вызова функции, это typeof оператор следует выражение в скобках. Это то же самое, что писать !(foo) вместо !foo.

Почему так?

Если вы видели такой код, то это либо должно сделать некоторые приоритеты яснее, либо человек, который написал код, не знал лучшего.

Могу ли я определить свои функции без использования()?

Определение функций и вызывающих функций - это две разные вещи. Я предполагаю, что вы имеете в виду последний, и ответ нет. Однако функции конструктора можно вызвать без (), если вы не передадите аргументы. То есть new Foo - это то же самое, что и у new Foo().

+0

Разве не '+' бинарный? Он принимает два аргумента ... – AJPerez

+0

@AJPerez: Это и есть, [унарный '+'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators# Unary_plus _ (. 2B)). –

+0

Ох. Ты прав. Никогда не слышал об этом раньше ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_(.2B) – AJPerez

0

Вы можете прочитать MDN

В TYPEOF оператор возвращает строку, указывающую тип невычисленного операнда.

Оператор TypeOf следует операнда:

TypeOf операнд

// Strings 
typeof "" === 'string'; 
typeof "bla" === 'string'; 
typeof (typeof 1) === 'string'; // typeof always return a string 
typeof String("abc") === 'string'; // but never use this form! 
Смежные вопросы