Значение === с вызовом функции

Я проходил через 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/

5 ответов

Решение

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

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

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

Это оно.

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

Поэтому просто относитесь к нему как к любому другому comparison operator в JavaScript

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

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

Это строгий сравнительный тест, является ли функция f(x,y,z)при вызове со значением параметра x, равным 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,

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

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

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

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

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

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

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

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

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.

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

Другие вопросы по тегам