1,求字符串的长度(单位是字节)
function getlength(str){
var len=str.length;
var bytes=len;
for(var i=0;i<len;i++){
if(str.charCodeAt(i)>255) //判断是中文还是英文,中文两个字节
bytes++;}
return bytes;}
将字符串转化为驼峰式
function toCamel(msg){
var arr=msg.split('-');
for(var i=1;i<arr.length;i++){
arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].slice(1);
}
return arr.join('')}
请将一个URL的search部分参数与值转换成一个json对象
//search部分的参数格式:a=1&b=2&c=3
function getJsonFromUrlSearch(search){
var item;
var result={};
if(search.indexOf('&')<0){
item=search.split('=');
result[item[0]]=item[1];
return result;
}
var splitArray=search.split('&');
for (var i = 0; i < splitArray.length; i++) {
var obj = splitArray[i];
item=obj.split('=');
result[item[0]]=item[1];
}
return result;
}
var c=getJsonFromUrlSearch("a=1&b=2&c=3");
解析URL成一个对象?
String.prototype.urlQueryString = function(){
var url = this.split('?')[1].split('&'),
len = url.length;
this.url = {};
for(var i = 0; i < len; i += 1){
var cell = url[i].split('='),
key = cell[0],
val = cell[1];
this.url[''+key+''] = val;
}
return this.url;
}
var url = '?name=12&age=23';
console.log(url.urlQueryString().age);
2,统计字符串中出现次数最多的字母数,或者统计字母的个数
function getmaxstr(str){
if(str.length == 1){return str;}
var newarr = [];
for(var i = 0 ; ss= str.length, i<ss; i++ ){
if(!newarr[str.charAt(i)]){
newarr[str.charAt(i)] = 1;
}else{
newarr[str.charAt(i)] +=1;
}
}
console.log(newarr);
var maxkey='';
var maxvalue=1;//设定一个值
for(var k in newarr){
if(newarr[k]> maxvalue){//根据这个值做判读 将数组中的每个元素 与这个值做比较! 如果大于他,那么将住宿
maxvalue = newarr[k];//出现的次数
maxkey = k;//次数最多的 字母
}
}
console.log(maxkey);
return maxvalue;
}
3,统计数组中出现次数最多的字母数
Array.prototype.diaohuan=function(arr){
var newarr=[];
for(var i = 0; i<this.length; i++){
if(!newarr[this[i]] ){
newarr[this[i]] = 1;
}else{
newarr[this[i]] +=1;
}
}
console.log(newarr);
var maxkey = 1;
var maxvalue ="";
for (var k in newarr){
if(newarr[k] > 1){
maxvalue =newarr[k];
maxkey = k;
}
}
return maxvalue;
console.log(maxvalue);
}
alert(arr.diaohuan());
4.清空字符串前后的空格
function cleans(str){
if(str&&typeof str==='string'){
return str.replace(/(^\s*)|(\s*$)/g, "");}
}
function trim(str){
str = str.replace(/^(\s|\u00A0)+/,'');
for(var i=str.length-1; i>=0; i--){
if(/\S/.test(str.charAt(i))){
str = str.substring(0, i+1);
break; } }
return str;
}
5.实现数组合并并去重
function MergeArray(arr1,arr2){
var _arr = new Array();
for(var i=0;i<arr1.length;i++){
_arr.push(arr1[i]);
}
for(var i=0;i<arr2.length;i++){
var flag = true;
for(var j=0;j<arr1.length;j++){
if(arr2[i]==arr1[j]){
flag=false;
break;
}
}
if(flag){
_arr.push(arr2[i]);
}
}
return _arr;
}
function uniqueArr(array) {
array.sort();
var n = [];
for (var i = 0; i < array.length; i++) {
if (array[i] !== n[n.length - 1]) {
n.push(array[i]);
}
}
return n;
}
正则表达式
正则表达式--验证手机号码:13[0-9]{9}
实现手机号前带86或是+86的情况:^((\+86)|(86))?(13)\d{9}$
电话号码与手机号码同时验证:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
提取信息中的中国手机号码:(86)*0*13\d{9}
提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
提取信息中的中国身份证号码:\d{18}|\d{15}
提取信息中的整数:\d+
提取信息中的浮点数(即小数):(-?\d*)\.?\d+
提取信息中的任何数字 :(-?\d*)(\.\d+)?
提取信息中的中文字符串:[\u4e00-\u9fa5]*
提取信息中的双字节字符串 (汉字):[^\x00-\xff]*
回文
function isPalindrome(str) {
str = str.replace(/\W/g, '').toLowerCase(); return (str == str.split('').reverse().join(''));
}
2.写一个 sum方法,在使用下面任一语法调用时,都可以正常工作。
console.log(sum(2,3)); // Outputs 5console.log(sum(2)(3)); // Outputs 5
(至少)有两种方法可以做到:
方法1
function sum(x) { if (arguments.length == 2) { return arguments[0] + arguments[1];
} else { return function(y) { return x + y; };
}
}
在JavaScript中,函数可以提供到 arguments 对象的访问,arguments 对象提供传递到函数的实际参数的访问。这使我们能够使用 length 属性来确定在运行时传递给函数的参数数量。
如果传递两个参数,那么只需加在一起,并返回。
否则,我们假设它被以 sum(2)(3)这样的形式调用,所以我们返回一个匿名函数,这个匿名函数合并了传递到 sum()的参数和传递给匿名函数的参数。
方法2
function sum(x, y) { if (y !== undefined) { return x + y;
} else { return function(y) { return x + y; };
}
}
当调用一个函数的时候,JavaScript不要求参数的数目匹配函数定义中的参数数量。如果传递的参数数量大于函数定义中参数数量,那么多余参数将简单地被忽略。另一方面,如果传递的参数数量小于函数定义中的参数数量,那么缺少的参数在函数中被引用时将会给一个 undefined值。所以,在上面的例子中,简单地检查第2个参数是否未定义,就可以相应地确定函数被调用以及进行的方式。
随机选10-100之间10个数字,并排序
function randoms (start,end){
return Math,floor(Math.random()*(end-start+1)+start);
}
var res=[];
for(var i=0;i<10;i++){
res.push(randoms(10,100));
res.sort();
}
把两个数组合并,并删除第二个元素
var arr3=arr1.concat(arr2);
arr3.splice(1,1);
一对兔子,每月生一对小兔子,小兔子从第二个月又能生,问 n个月生多少
function rabbit(nu)
- .form中的input可以设置为readonly和disable,请问2者有什么区别?
readonly不可编辑,但可以选择和复制;值可以传递到后台
disabled不能编辑,不能复制,不能选择;值不可以传递到后台
实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf = [];//创建一个空的数组
var i = Obj.length;
while (i--) {
buf[i] = clone(Obj[i]);
}
return buf;
}else if (Obj instanceof Object){
buf = {};//创建一个空对象
for (var k in Obj) { //为这个对象添加新的属性
buf[k] = clone(Obj[k]);
}
return buf;
}else{ //普通变量直接赋值
return Obj;
}
}
给String对象添加一个方法,传入一个string类型的参数,然后将string的每个字符间价格空格返回,例如:
addSpace(“hello world”) // -> ‘h e l l o w o r l d’
String.prototype.spacify = function(){
return this.split('').join(' ');
};
定义一个log方法,让它可以代理console.log的方法。
可行的方法一:
function log(msg) {
console.log(msg);
}
log(“hello world!”) // hello world!
如果要传入多个参数呢?显然上面的方法不能满足要求,所以更好的方法是:
function log(){
console.log.apply(console, arguments);
};
var User = {
count: 1,
getCount: function() {
return this.count;
}
};
console.log(User.getCount()); // what?
var func = User.getCount;
console.log(func()); // what?
问两处console输出什么?为什么?
答案是1和undefined。
func是在winodw的上下文中被执行的,所以会访问不到count属性。
继续追问,那么如何确保Uesr总是能访问到func的上下文,即正确返回1。正确的方法是使用Function.prototype.bind。兼容各个浏览器完整代码如下:
Function.prototype.bind = Function.prototype.bind || function(context){
var self = this;
return function(){
return self.apply(context, arguments);
};
}
var func = User.getCount.bind(User);
console.log(func());
//define
(function(window){
function fn(str){
this.str=str;
}
fn.prototype.format = function(){
var arg = ______;
return this.str.replace(_____,function(a,b){
return arg[b]||"";
});
}
window.fn = fn;
})(window);
//use
(function(){
var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');
console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));
})();
答案:访函数的作用是使用format函数将函数的参数替换掉{0}这样的内容,返回一个格式化后的结果:
第一个空是:arguments
第二个空是:/{(\d+)}/ig
删除数组成员
delete arr[index](删除成员)
arr.splice(index,1);(删除所占位置)