函数参数的默认值

时间:2014-10-08 06:52:55

标签: javascript

这些是我必须编写的脚本的说明:

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

使用||运算符指定第一个和第二个的默认值   功能。如果未指定一个或两个参数,则为空   string应该用作默认值。

     

进行更改后,您应该能够将该功能测试为   如下:

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)

我甚至不知道从哪里开始。有人可以为我揭开光明吗?

3 个答案:

答案 0 :(得分:0)

默认值

first = first || '';

或者,但是没有在要求中定义

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

将此应用于两个参数

答案 1 :(得分:0)

试试这个:

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;
        }
    }

答案 2 :(得分:0)

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

如果您将其称为longest('Alice'),则会发出错误:

TypeError: Cannot read property 'length' of undefined

因为第二个是undefined,并且无法读取undefined的{​​{1}}属性。

.length实际上是Javascript中的一个东西,而不是像许多其他语言中的自动错误。我们很快就会回来......

目的是让您考虑如何修复该功能。如果函数分配了一个空字符串来代替undefined,则空字符串的长度为0,可以读取。

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

||

现在,如果第一个或第二个未定义,它们将在本地替换为 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')

的错误

不幸的是,如图所示的分配并没有教你足够的Javascript。可能值得了解一个特殊的Javascript功能:任何属性是否称为“长度”或其他属性都可以从具有该属性的现有对象中读取。这可能会导致不良行为。结果是一个名为'Alice'的值,这是一个值可以在Javascript中的值。

undefined与数字进行比较时,结果始终为undefined。数学上通常是不可能的。我们通常认为如果falsex>1,则false必须为x<1truex。这种逻辑对1不起作用。

undefinedundefined进行比较后,结果也为undefined,除非它是false的等式测试。

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

longest()返回longest(1,100)正确。

100返回longest(100,1) OOPS。