javascript - js函数中参数没有是把他设置为“”,怎么弄?
高洛峰
高洛峰 2017-04-11 11:09:22
[JavaScript讨论组]
function add(a,b,c){
        if(c=undefined){
           var c='';
        }
        console.log(a,b,c);
 }

add(a,b);

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
黄舟

题目的代码出现了一个常见错误就是将赋值当成相等运算符使用:

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, ""

  1. 短路是指如果判断到一个子逻辑表达式能够判断整个逻辑表达式时, 则后续的逻辑表达式不再进行判断, 如示例中的c || '', 当cnull或者undefined时第一个表达式的值为false, 执行第二个表达式. 参考JavaScript短路求值 ↩
  2. EMCAScript 6入门-函数的扩展 ↩
PHP中文网

if(c==undefined)

阿神

补充下,var 就不需要了吧

高洛峰

题主你这语法错了啊,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);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号