猿问

js函数中参数没有是把他设置为“”,怎么弄?

function add(a,b,c){

        if(c=undefined){

           var c='';

        }

        console.log(a,b,c);

 }


add(a,b);

问题:为什么当c没有传参时,我把c赋值为“”不行

慕桂英546537
浏览 629回答 1
1回答

扬帆大鱼

题目的代码出现了一个常见错误就是将赋值当成相等运算符使用:if(c=undefined){  var c = ''; }所以这里的实际逻辑是: 如果成功将c赋值为undefined时, 将在if块中声明一个同名变量c, 并将其赋值为空字符串, 而这个新变量c将在if语句结束后销毁(这里涉及到变量作用域, 请自行查阅资料), if语句结束后的c变量值仍然是undefined. 也就是如下所做的事情:function add(a, b, c) {  if (c = undefined) {  // 赋值语句总是执行, c的值为undefined     var anthorVariableNamedC = '';  // 新建变量"c"并赋值为空字符串   }     console.log(a, b, c);  // a, b, undefined}于是, 我们看到控制台输出是a, b, undefined而不是a, b, "".那么如何获得期望效果呢?方法一: 利用逻辑与操作符的短路特性1对变量进行赋值:function add(a, b, c) {  c = c || '';  // 对传入参数c赋值, 如果c值取原本的参数值或空字符串.   console.log(a, b, c); }add(1, 2);  // 1, 2, ""方法二: 使用ES6新特性的默认参数值2:function add(a, b, c = '') {  console.log(a, b, c); }add(1, 2);  // 1, 2, ""短路是指如果判断到一个子逻辑表达式能够判断整个逻辑表达式时, 则后续的逻辑表达式不再进行判断, 如示例中的c || '', 当c为null或者undefined时第一个表达式的值为false, 执行第二个表达式. 
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答