当我使用join
方法时,我不知道为什么我有逗号。谁能解释一下?
function maskify(cc) {
var a = cc.slice(cc.length - 4, cc.length);
var b = cc.slice(0, cc.length - 4);
b = b.split("");
for (var i = 0; i < b.length; i++) {
b[i] = "#";
}
b.join("#");
console.log(b + a);
}
maskify("sadasdasdasdasdasd");
// result : #,#,#,#,#,dasd
&#13;
答案 0 :(得分:2)
Join()
是数组的方法,它允许将其元素作为字符串连接并返回。 Join()
接受一个分隔符参数,默认值为“,”。如果要在没有任何分隔符的情况下加入,则需要指定空字符串。有关参考,请参阅MDN。
对于您的代码,您正在加入但不是存储,并使用带有变量a
的+运算符再次将其转换为字符串
function maskify(cc) {
var a = cc.slice(cc.length - 4, cc.length);
var b = cc.slice(0, cc.length - 4);
b = b.split("");
for (var i = 0; i < b.length; i++) {
b[i] = "#";
}
var output=b.join("#");
console.log(output + a);
}
maskify("sadasdasdasdasdasd");
// result : #,#,#,#,#,dasd
答案 1 :(得分:1)
在split
上使用b
时,b
是一系列单个字符。记录b + a
时,由于b
是一个数组而a
是一个字符串,+
将充当字符串连接运算符。隐式使用b
将toString()
转换为字符串。数组上的toString
返回由,
连接的数组元素的字符串。所以,你在最后的输出中得到了逗号。
解决此问题的简单解决方案是在连接之前显式join
数组元素。
function maskify(cc) {
var a = cc.slice(cc.length - 4, cc.length);
var b = cc.slice(0, cc.length - 4);
b = b.split("");
for (var i = 0; i < b.length; i++) {
b[i] = "#";
}
b.join("#");
console.log(b.join('') + a);
}
maskify("sadasdasdasdasdasd");
获得相同结果的另一种方法是使用repeat
var str = 'sadasdasdasdasdasd';
var maskedStr = '#'.repeat(str.length -4) + str.slice(-4);
console.log(maskedStr);
请注意,仅在最新的浏览器/环境中支持此功能。检查browser compatibility,如果不支持请使用polyfill。
答案 2 :(得分:1)
这是因为在合并数组和字符串时,数组会被隐式转换为字符串。
var array = [...];
array + "";
与:
相同array.toString() + "";
且[4, 5].toString()
为"4,5"
(默认情况下添加,
)。
<强>为什么吗
因为,当到达这一行时:
console.log(b + a);
a
将是一个字符串,因为它是从字符串cc
中剪切的。并且b
是一个数组,因为它是拆分的结果,并且b.join
不会将b
更改为字符串,它只返回一个您不使用的字符串并离开完整b
(所以b
仍为数组)。
<强>修正:强>
使用b.join
而不是b
:
console.log(b.join("#") + a);
或:
b = b.join("#");
console.log(b + a);
答案 3 :(得分:0)
我添加
var c = b.concat(a);
c.join("");
它正在运作。非常感谢你:D