函数参数的默认值

Default values for function parameters

本文关键字:默认值 参数 函数      更新时间:2023-09-26

以下是我必须编写的脚本的说明:

 function longest(first, second) {
    if (first.length >=  second.length) {
        return first;
    } else {
        return second;
    }

使用||运算符为中的第一个和第二个指定默认值函数。如果未指定一个或两个参数,则为空字符串应用作默认值。

一旦您进行了更改,您应该能够将函数测试为如下:

console.log(longest('Alice'));   // second is undefined - second defaults to the empty string
//Alice
console.log(longest());    // both first and second are undefined - both default to the empty string
//(an empty string)
console.log(longest('hi','hello'));
//hello
console.log(longest('hi', 'me'));
//hi
console.log(longest(''));
//(an empty string)

我甚至不知道从哪里开始。有人能帮我照明一下吗?

试试这个:

function longest(first, second) {
        var firstDefault = '';
        var secondDefault = '';
        first = typeof first !== 'undefined' ? first : firstDefault;
        second = typeof second !== 'undefined' ? second : secondDefault;
        if (first.length >=  second.length) {
            return first;
        } else {
            return second;
        }
    }

默认值

first = first || '';

或者,但要求中未对此进行定义

first = (typeof first !== 'undefined') ? first : '';

将此应用于两个参数

的问题

 function longest(first, second) {
    if (first.length >=  second.length) {
        return first;
    } else {
        return second;
    }
  }

如果你把它称为longest('Alice'),它会喷出一个错误:

TypeError: Cannot read property 'length' of undefined

因为第二个是undefined,并且像.length一样的undefined的属性不能被读取。

undefined实际上是Javascript中的一个东西,而不是像许多其他语言中那样的自动错误。我们很快就会回到这一点。。。

目的是让你思考如何修复函数。如果函数指定了一个空白字符串来代替未定义的字符串,则该空白字符串的长度为0,可以读取。

在Javascript中,||运算符可用于为缺少的变量分配默认值,如下所示:

 function longest(first, second) {
    var defaultValue = ''; 
    var first = first || defaultValue; 
    var second = second || defaultValue;
    if (first.length >=  second.length) {
        return first;
    } else {
        return second;
    }
  }

现在,如果第一个或第二个未定义,它们将被本地替换为defaultValue变量的值,该变量在这里被设置为空字符串''

空字符串不是未定义的值,它是一个不包含任何字符的字符串。它有一个长度,而这个长度是零。现在,传递未定义的值时,if语句不会失败。

现在longest('Alice')产生'Alice'

Bugs

不幸的是,如图所示的作业并没有教会你足够的Javascript知识。关于Javascript的一个特殊特性,可能值得一提:任何属性,无论是被称为"长度"还是其他什么,都可以从不具有该属性的现有对象中读取。这可能会导致不希望的行为。结果是一个名为undefined的值,这个值可以是Javascript中的值。

undefined与一个数字进行比较时,结果总是false。从数学上讲,这通常是不可能的。我们通常认为,如果x>1false,那么x<1必须是true,或者x1。这种逻辑对undefined不起作用。

当将undefinedundefined进行比较时,结果也是false,除非它是相等测试,即true

为什么这很重要?它与上面longest()函数中的错误有关。数字输入就是一个例子。表示数字的字符串有长度,但数字没有长度。读取一个数字的长度会产生未定义的结果。将未定义的数字与已定义的数字进行比较是错误的。这意味着我们可以做到:

longest(1,100)返回100 Correct。

但是

longest(100,1)返回1 OOPS。