ECMAScript 3至6
(JavaScript,JScript等)
使用正则表达式:
function f(x,y,z,r){for(r=0,z=RegExp(z);x<y;r+=+z.test(''+x++));return r}
分解:
function f(x,y,z,r){ // note argument `r`, eliminating the need for `var `
for( r=0, z=RegExp(z) // omitting `new` since ES will add it if omitted
; x<y //
; r+=+z.test(''+x++) // `x++` == post increment
// `''+Number` == convert Number to string
// `test` gives true | false
// `+Boolean` converts boolean to 1 | 0
// `r+=Number` incrementing r (were Number is always 1 or 0)
); // no body thus semicolon is mandatory!
return r; // returning r
}
使用indexOf:
function f(x,y,z,r){for(r=0;x<y;r+=+!!~(''+x++).indexOf(z));return r}
分解:
function f(x,y,z,r){ // note argument `r`, eliminating the need for `var `
for( r=0 // omitting `new` since ES will add it if omitted
; x<y //
; r+=+!!~(''+x++).indexOf(z) // `x++` == post increment
// `''+Number` == convert Number to string
// `indexOf` returns index or `-1` when not found
// `!!~ indexOf` converts sentinel value to boolean
// `+Boolean` converts boolean to 1 | 0
// `r+=Number` incrementing r (were Number is 1 or 0)
); // no body thus semicolon is mandatory!
return r; // returning r
}
这个函数体比弗洛伦的函数体少一个字符,因此使用ES6 =>
函数表示法时,总数为62个字符
调用f(0,1e6,2)
示例:用法示例:alert( f(0,1e6,2) );
JSFiddle在这里
PS:以上两个函数均返回其局部变量r
。
因此,当将结果变量泄漏r
到全局范围中时,可以再次保存10个字符:
function f(x,y,z){for(r=0;i<=j;r+=+!!~(''+i++).indexOf(z));}
使用示例: alert( f(0,1e6,2)||r );