这是一个聪明的小把戏(我想我以前在 SO 上见过) :

var str = "" + 1
var pad = "0000"
var ans = pad.substring(0, pad.length - str.length) + str

如果 substring 的第二个参数是负的,JavaScript 比一些语言更加宽容,因此它会“正确溢出”(或者根据查看方式不正确) :

也就是说,与上述情况一起:

  • 1-> “0001”
  • 12345-> “12345”

支持负数是一种练习; -)

String.prototype.padZero= function(len, c){
var s= this, c= c || '0';
while(s.length< len) s= c+ s;
return s;
}

除了名称之外,您还可以使用任何字符的左键,包括空格。 我从来没有用过右边的填充物,但是那很容易。

为了演示 javascript 的灵活性: 您可以使用一个 oneliner

function padLeft(nr, n, str){
return Array(n-String(nr).length+1).join(str||'0')+nr;
}
//or as a Number prototype method:
Number.prototype.padLeft = function (n,str){
return Array(n-String(this).length+1).join(str||'0')+this;
}
//examples
console.log(padLeft(23,5));       //=> '00023'
console.log((23).padLeft(5));     //=> '00023'
console.log((23).padLeft(5,' ')); //=> '   23'
console.log(padLeft(23,5,'>>'));  //=> '>>>>>>23'

如果你也想用这个表示负数:

Number.prototype.padLeft = function (n,str) {
return (this < 0 ? '-' : '') +
Array(n-String(Math.abs(this)).length+1)
.join(str||'0') +
(Math.abs(this));
}
console.log((-23).padLeft(5));     //=> '-00023'

如果您不想使用 Array,可以选择:

number.prototype.padLeft = function (len,chr) {
var self = Math.abs(this)+'';
return (this<0 && '-' || '')+
(String(Math.pow( 10, (len || 2)-self.length))
.slice(1).replace(/0/g,chr||'0') + self);
}

我使用以下对象:

function Padder(len, pad) {
if (len === undefined) {
len = 1;
} else if (pad === undefined) {
pad = '0';
}


var pads = '';
while (pads.length < len) {
pads += pad;
}


this.pad = function (what) {
var s = what.toString();
return pads.substring(0, pads.length - s.length) + s;
};
}

有了它,你可以很容易地定义不同的“填充物”:

var zero4 = new Padder(4);
zero4.pad(12); // "0012"
zero4.pad(12345); // "12345"
zero4.pad("xx"); // "00xx"
var x3 = new Padder(3, "x");
x3.pad(12); // "x12"