2016-12-30 7 views
7

Я был, проходящие через ES6 при условии, что это будет легко переключаться на ECMAScript 2017.Значение === с вызовом функции

Проходя, я запутался об этом коде

function f (x, y = 7, z = 42) { 
    return x + y + z 
} 
f(1) === 50 

Который имеет ES5 эквивалент

function f (x, y, z) { 
    if (y === undefined) 
     y = 7; 
    if (z === undefined) 
     z = 42; 
    return x + y + z; 
}; 
f(1) === 50; 

я понимаю параметр по умолчанию вещь от него.

Но что означает f(1)===50 в обоих кодах? Какая польза от этого?

Вот еще один пример

function f (x, y, ...a) { 
    return (x + y) * a.length 
} 
f(1, 2, "hello", true, 7) === 9 

Что f(1, 2, "hello", true, 7) === 9 значит?

Я понимаю, что === для сравнения LHS и RHS оператора, включая тип и не только значения.

Но почему он так использовался?

Просьба объяснить его использование.

Это ссылка, откуда я получил это. http://es6-features.org/#RestParameter

+0

Оператор ['==='] (http://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons) никоим образом не является новым , он существует в JavaScript с самого начала. –

+0

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

+0

это просто сравнение с их значением и типом данных – Beginner

ответ

1

По моему мнению, вы почти приняли его правильно.

Просто поместите этот вызов функции вместе с знаком тройного равенства в if состоянии.

if (f(1) === 50){ 
    console.log(true); 
} 
else { 
    console.log(false); 
} 

Thats it.

Тройка, равная простому оператору сравнения. И вызов функции на одной стороне тройки, равной оператору, означает значение, возвращаемое этой функцией.

Следовательно, просто обрабатывайте его как любой другой comparison operator в javascript.

И, пожалуйста, исправьте меня, если я неверно истолковал ваш вопрос.!

Всего наилучшего!

2

В f(1)===50 проверяет, является ли f(1) равен 50. Если это выражение вычисляется, чтобы true, тогда результат этого выражения true. В противном случае это false. Поскольку вы не присваиваете это значение переменной, как она есть, вы не можете ее использовать нигде.

Формально === называется оператором строгого равенства. Для получения дополнительной информации, пожалуйста, посмотрите here.

+0

Вы можете использовать его в консоли: https: //i.imgur. com/zqeoEWl.png –

+0

@ ÁlvaroGonzález, конечно, вы можете видеть это в консоли, но вы не можете использовать это значение в любом месте. Это моя точка зрения. В consle вы просто видите результат оценки. – Christos

+0

Исправить. Как отметил Макскс, для этого в производственном коде нет смысла. Но это может помочь в развитии. –

3

Это строгое испытание сравнения ли функции f(x,y,z), при вызове со значением параметра х 1 возвращает значение 50. Это было бы верно, когда значение параметров по умолчанию добавляется к значению x 7 и 42.

Эти вызовы и сравнения функций предназначены исключительно для предоставления примеров использования и, возможно, тестовых примеров для функций, которые они называют.

Код

function f (x, y, ...a) { 
    return (x + y) * a.length 
} 
f(1, 2, "hello", true, 7) === 9 

является примером расширенной обработки параметров. значение переменной длины ...a равно 3, поэтому тест подтверждает количество параметров, переданных функции после x и y.

2

Дело в том, что его примерный код. Они показывают вам, что результаты функции при вызове с этими аргументами равны чему-то. Выражение само по себе ничего не сделает, если вы не вставьте его в консоль.

Они могли бы так же легко использовать комментарий.

f(1, 2, "hello", true, 7) // 9 
1

Идентичность (===) оператор ведет себя тождественно равенство (==) оператор, за исключением без преобразования типа сделан, и типов должны быть одинаковыми, чтобы считать равным.

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

Может быть, этот пример будет более ясно, в вашем случае:

f(1,1,1) // returns 3 - numeric type 
f(1,1,"1") // returns "111" - string type 
//so now if you will write 
f(1,1,1) == "3" // true 
f(1,1,1) == 3 // true 
f(1,1,1) === "3" // false, because the result is 3 not "3" as string. 
f(1,1,1) === 3 // true 
f(1,1,"1") == "111" // true 
f(1,1,"1") == 111 // true 
f(1,1,"1") === "111" // true 
f(1,1,"1") === 111 // false, because the result is string "111" not 111 number. 

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