函数参数的默认值
Default values for function parameters
以下是我必须编写的脚本的说明:
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>1
是false
,那么x<1
必须是true
,或者x
是1
。这种逻辑对undefined
不起作用。
当将undefined
与undefined
进行比较时,结果也是false
,除非它是相等测试,即true
。
为什么这很重要?它与上面longest()
函数中的错误有关。数字输入就是一个例子。表示数字的字符串有长度,但数字没有长度。读取一个数字的长度会产生未定义的结果。将未定义的数字与已定义的数字进行比较是错误的。这意味着我们可以做到:
longest(1,100)
返回100
Correct。
但是
longest(100,1)
返回1
OOPS。
- 如何使用默认值对参数进行解结构
- 在节点.js中设置 HTTP GET 中的 URL 参数的默认值
- 接受选项对象作为参数的简洁方法,回退到省略属性的默认值
- 定义JavaScript函数参数的对象默认值
- 无法将默认布尔参数设置为默认值
- JavaScript:处理默认值为true的函数参数
- CoffeeScript:设置已销毁参数的默认值
- 如何在ES6中使用所有默认值来销毁选项参数
- 函数参数的默认值
- 为参数指定默认值
- 有没有办法让我使用打字稿使参数具有默认值
- ES6构造对象,在赋值时不用作函数参数时的默认值
- setTimeout和setinterval的第二个参数是必需的吗?如果不是,默认值是多少
- 在javascript函数中设置布尔参数的默认值
- Grunt-contrib-uglify在使用默认值的函数参数时抛出错误
- 如何根据URL参数设置下拉菜单的默认值
- 如何在Javascript中为可选参数设置默认值
- EmberJS查询参数默认值
- 如何将参数传递到模块模式以覆盖JavaScript中的默认值[private properties]
- Do函数参数支持JavaScript中的默认值