JavaScriptは簡体字変換を実現します.
6891 ワード
/**
*
* @param {string} text
* @param {string} to ” “ ” “
* @return {string}
*/
var transformTo = (function(){
var simplified = ' ',
traditional= ' ';
return function(text, to){
// null, undefined, NaN, '',
if((!text || !text.trim()) &&
(!to || !to.trim())){
return;
}
var fromChar, toChar, index,
from = (to === ' ') ? traditional : simplified,
to = (to === ' ') ? simplified : traditional;
for(var i = 0, len = text.length; i < len; i++){
fromChar = text.charAt(i);
index = from.indexOf(fromChar);
if(index !== -1){
toChar = to.charAt(index);
text = text.replace(new RegExp(fromChar, 'g'), toChar); //1
}
}
return text; //2
}
})();
//
var name = ' ';
console.log(transformTo(name, ' '));
ここには2つの注意点があります.コードがすでに表示されている1と2:1.replace方法は元の文字列を修正しないので、text=を追加しないと、毎回変えたのと同じです.次は消えます.
2.returnが必要なのは、stringが基本的なタイプなので、引用ではなく値を伝えます. tranformTo(new String('周杰倫')、'繁')は引用ですが、このように書く人は少ないでしょう.残念ながら、たとえ引用しても、replace()は基本タイプのstringに戻るので、最終的にはreturn textが必要です.
第二の点について、例を挙げて証明します.
var jay1 = ' ',
jay2 = new String(' ');
function fun(str){
str.toString = function(){
return ' jay!';
}
}
//
fun(jay1);
jay1.toString();
//Firebug " ", toString()
//
fun(jay2);
jay2.toString();
//Firebug " jay!", toString()
//replace()
var name = new String('110');
typeof name.replace(/0/, '1'); // string, object!
性能の方面はまだ考慮していないで、達人が意見を出すことができることを望みます!