1.去除文本空白字符
(1)正则表达式
str=str.replace(/\s*/g,"");//去除所有空白字符
str=str.replace(/^\s*|\s*$/g,"");
\s:匹配任何空白字符一次或多次
*:匹配前面子式0次或多次
+:匹配前面子式1次或多次
^:从开始位置匹配
$:从结束位置匹配
(2):trim():只能去除字符串的开始和结尾的空白字符
(3)&.trim();
2.如何获取浏览器URL中查询字符串的参数?
var href="http://www.runoob.com/jquery/misc-trim.html?channelid=12333&name=xiaoming&age=23";
var array=href.split('?');
if(array[0]==href){
console.log('无参数');
}
var arr=array[1].split('&');
var obj={};
for(var i=0;i<arr.length;i++){
var arg=arr[i].split('=');
obj[arg[0]]=arg[1];
}
console.log(obj);
3.js字符串操作
concat()--将两个或多个字符串文本组合起来,返回一个新的字符串
indexof()--返回字符串中指定字符第一次出现的索引,没有返回-1
lastindexof()--返回字符串中指定字符最后一次出现的索引,没有返回-1
charAt()--返回指定索引处的字符
match()--检查字符串是否匹配正则表达式,返回的是一个数组,数组第一项是匹配的结果
search()--检查字符串是否匹配正则表达式,返回的是匹配结果的索引
replace()--检查字符串是否匹配正则表达式,参数一是正则表达式,参数二是要替换的值
slice()--提取字符串,参数一是开始位置,参数二是结束位置
substring()--提取字符串,参数一是开始位置,参数二是结束位置
substr()--提取字符串,参数一是开始位置,参数二是长度
split()--将字符串转换为数组
toLowerCase()--将整个字符串转换为小写
toUpperCase()--将整个字符串转换为大写
4.怎么创建、添加、删除、替换、插入和查找节点?
1)创建节点
createElement();//创建元素
createTextNode();//创建文本节点
2)添加、删除、替换、插入
appendChild();
removeChild();
replaceChild();
insertBefore();
3)查找
getElementById();//通过元素id
getElementsByTagName();//通过标签名称
5.this的应用
1)函数模式:
function test(){
console.log(this);//指向windows
}
2)方法模式
var obj={
func:function(){
console.log(this);//指向obj
}
}
3)构造函数模式
function Person(){
console.log(this);//指向p1
}
var p1=new Person();
4)上下文模式
var number=[1,2,3,4];
console.log(Math.max.apply(this,number));//4
console.log(Math.max.call(this,1,2,3,4));//4
将函数上下文作用域变为this对象上下文作用域。
6.如何理解闭包?
闭包:有权访问另一个函数作用域中的变量的函数。当一个函数的返回值是另一个函数,返回的函数调用了父函数的内部变量,返回的函数在外部被执行,就产生闭包。
表现形式:使函数外部能都调动函数内部定义的变量
var count=10;//全局变量
function add(){
var count=0;
return function(){
count+=1;
console.log(count);
}
}
var s=add();
add();//1
add();//2
函数的作用域:全局作用域和局部作用域
特点:函数内部可以读取函数外部的全局变量,在函数外部无法读取函数内部的局部变量;
滥用闭包:会造成内存泄漏:由于闭包会使函数中的变量被保存在内存中,闭包过多,就会导致内存消耗过大,所以不能滥用闭包,否则会导致网页的性能问题。解决方法:在推出函数之前,将不使用的局部变量全部删除。
7.垃圾回收机制和内存管理?
定义:garbage collection(GC),执行环境负责管理代码执行过程中使用的内存
原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放内存。但是这个过程不是实时的,因为开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。
垃圾回收策略:标记清除和引用计数
8.面向对象中继承实现?
面向对象的基本特征:封闭、继承、多态
9.判断一个字符串出现次数最多的字符?并统计次数
var str='asdfssaaasasasasaa';
var json={};
for(var i=0;i<str.length;i++){
if(!json[str.charAt(i)]){
json[str.charAt(i)]=1;
}else{
json[str.charAt(i)]++;
}
}
var Imax=0;
var Iindex=0;
for(var i in json){
if(json[i]>Imax){
Imax=json[i];
Iindex=i;
}
}
console.log('出现次数最多的是:'+Iindex+'出现'+Imax);
9.Array相关操作
concat()--连接两个或更多的数组,并返回新的数组
join()--将数组的所有元素转换为字符串,并通过指定分隔符分来
toString()--把数组转换为字符串,并返回结果
toLocaleString()--把数组转换为字符串,并返回结果
valueOf()--返回数组对象的原始值
push()--向数组末尾添加元素,并返回新的数组长度
pop()--删除并返回数组的最后一个元素
unshift()--向数组来头添加元素,并返回新的数组长度
shift()--删除并返回数组的第一个元素
reverse()--颠倒数组中元素的顺序
sort()--对数组进行排序,按传入函数
slice()--提取元素,参数1是开始位置,参数2是结束位置
splice()--删除、添加、替换
迭代方法:
every()--对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
some()--对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。
filter()--对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
map()--对数组中的每一项运行给定函数,返回函数每次调用结果组成的数组。
forEach()--对数组中的每一项运行给定函数,无返回值。
arr.filter(function(item,index,array){
return item>2;
})
10.数组中元素去重
方法一:
var arr=[1,2,2,3,4,3,3,5,6];
var obj={};
var arr1=[];
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=1;
arr1.push(arr[i]);
}
}
方法二:
var arr=[1,2,4,3,4,3,4];
var arr2=[];
for(var i=0;i<arr.length;i++){
if(arr2.indexOf(arr[i])<0){
arr2.push(arr[i])
}
}
方法三:
var arr=[1,2,2,2,3,4,3,4];
var arr3.filter(function(item,index,self){
return self.indexOf(item)==index;
})
11.jQuery库中的$()是什么?
$()函数是jquery()函数的简写形式。$()函数用于将任何对象包裹成jquery()对象,接着你就被允许调用定义在jquery对象上的多个不同方法
$(this)和this关键字在jquery中的不同?
$(this)返回一个jquery对象,你可以调用jquery方法,比如text()获取文本,val()获取值;而this代表当前元素,他是javascript关键词中的一个,表示上下文中的当前DOM元素。
12.window.onload和$(document).ready()的区别?
执行时机:window.onload()必须等待所有内容加载完毕之后才能执行(包括所有图片);
$(document).ready()网页中所有DOM结构绘制完毕后就执行,可能DOM元素想关联的东西还没加载完
编写个数:window.onload()不能同时编写多个
$(document).ready()能同时编写多个
简化写法:window.onload()没有简化
$(document).read()可以简化为$(function(){})