function add(a,b,c){
if(c=undefined){
var c='';
}
console.log(a,b,c);
}
add(a,b);
问题:为什么当c没有传参时,我把c赋值为“”不行。
function add(a,b,c){
if(c=undefined){
var c='';
}
console.log(a,b,c);
}
add(a,b);
问题:为什么当c没有传参时,我把c赋值为“”不行。
function add(a,b,c){
var c = (typeof c !== 'undefined') ? c : '';
console.log(a,b,c);
}
题主你这语法错了啊,if(c===undefined)
,然后我一般这么做
function add(a,b,c){
c = c || '';
console.log(a,b,c);
}
add(1, 2);
用es6我也喜欢这么做
function add(a='', b='', c=''){
console.log(a,b,c);
}
add(1, 2);
13 回答13.1k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读
题目的代码出现了一个常见错误就是将赋值当成相等运算符使用:
所以这里的实际逻辑是: 如果成功将
c
赋值为undefined
时, 将在if
块中声明一个同名变量c
, 并将其赋值为空字符串, 而这个新变量c
将在if
语句结束后销毁(这里涉及到变量作用域, 请自行查阅资料),if
语句结束后的c
变量值仍然是undefined
. 也就是如下所做的事情:于是, 我们看到控制台输出是
a, b, undefined
而不是a, b, ""
.那么如何获得期望效果呢?
方法一: 利用逻辑与操作符的短路特性1对变量进行赋值:
方法二: 使用ES6新特性的默认参数值2:
c || ''
, 当c
为null
或者undefined
时第一个表达式的值为false
, 执行第二个表达式. 参考JavaScript短路求值 ↩