扫码关注官方订阅号
function add(a,b,c){ if(c=undefined){ var c=''; } console.log(a,b,c); } add(a,b);
问题:为什么当c没有传参时,我把c赋值为“”不行。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
题目的代码出现了一个常见错误就是将赋值当成相等运算符使用:
if(c=undefined){ var c = ''; }
所以这里的实际逻辑是: 如果成功将c赋值为undefined时, 将在if块中声明一个同名变量c, 并将其赋值为空字符串, 而这个新变量c将在if语句结束后销毁(这里涉及到变量作用域, 请自行查阅资料), if语句结束后的c变量值仍然是undefined. 也就是如下所做的事情:
c
undefined
if
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, "".
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 || ''
null
false
if(c==undefined)
补充下,var 就不需要了吧
题主你这语法错了啊,if(c===undefined),然后我一般这么做
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中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
题目的代码出现了一个常见错误就是将赋值当成相等运算符使用:
所以这里的实际逻辑是: 如果成功将
c赋值为undefined时, 将在if块中声明一个同名变量c, 并将其赋值为空字符串, 而这个新变量c将在if语句结束后销毁(这里涉及到变量作用域, 请自行查阅资料),if语句结束后的c变量值仍然是undefined. 也就是如下所做的事情:于是, 我们看到控制台输出是
a, b, undefined而不是a, b, "".那么如何获得期望效果呢?
方法一: 利用逻辑与操作符的短路特性1对变量进行赋值:
方法二: 使用ES6新特性的默认参数值2:
c || '', 当c为null或者undefined时第一个表达式的值为false, 执行第二个表达式. 参考JavaScript短路求值 ↩if(c==undefined)
补充下,var 就不需要了吧
题主你这语法错了啊,
if(c===undefined),然后我一般这么做用es6我也喜欢这么做