移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
解:
function rot13(str) { // LBH QVQ VG!
var uni = [];
for(var i =0;i64&&uni[i]<91)
{
uni[i]=str.charCodeAt(i)+13;
if(uni[i]>90)
{uni[i]-=26;}
}
}
var fi = String.fromCharCode.apply(null,uni);
return fi;
}
***********************
疑惑:fromCharCode的用法到底是什么意思?为什么要用apply?apply方法的传值为什么是null和uni呢?
尝试了
fromCharCode(uni)
String.fromCharCode(uni)
结果都是报错,而把变量去掉,随便写一个数字,却能得到输出结果。
那咋整?难道要重新写一个遍历吗???
随后看到这篇文章:http://www.cnblogs.com/zzsdream/p/5057131.html
那么我从头开始分析:
官方文档中是这样的:fromCharCode(num1,...,num n)
是的,变量不是一个数组,而是一组数字。数组是无法传到fromCharCode方法里面的(哭
而且fromCharCode是一个静态方法
静态方法不能被实体调用
举个栗子:
varBaseClass =function() {};
BaseClass.prototype.method1 =function(){
alert(' This is a instance method ');
}
varinstance1 =newBaseClass();
instance1.method1();//This is a instance method
弱机我理解的意思就是freeCharCode前面必须加String.
你想arr.freeCharCode()?不存在的。
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
比如String.freeCharCode(obj,args),obj是String里面一个this对象,可有可无(但当obj有具体参数时,obj当然要有的),而args里面的值会逐个传给String
可能说得不是很清楚,等以后回头再想想。