1.编写一个方法,去掉数组的重复元素
var arr=["a","c","c","a","a","a","a","a","a","a"]
var arr2=[];
for(var i=0;i<arr.length;i++){
if(arr2.indexOf(arr[i])<0){
arr2.push(arr[i]);
}
}
console.log(arr2);
这里还是要推荐下小编的web前端学习 群 : 569146385,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括 小编自己整理的一份最新的web前端资料和0基础入门教程,欢迎初学和进 阶中的小伙伴。在不忙的时间我会给大家解惑。
2.判断一个字符串中出现次数最多的字符,统计这个次数
var str="fdsffdsgtfdhgdfgdffd";
var obj={};
var arr=[];
for(var i=0;i<str.length;i++){
var num=str[i];
if(!obj[num]){
obj[num]=1;
}else{
obj[num]++;
}
}
var a=0;
var b=0;
for(key in obj){
if(b<obj[key]){
b=obj[key];
a=key;
}
}
console.log("字母:"+a+"次数"+b);
3.Javascript多人开发函数重名问题
(1) 可以开发前规定命名规范,根据不同开发人员开发的功能在函数前加前缀
(2) 将每个开发人员的函数封装到类中,调用的时候就调用类的函数,即使函数重名只要类名不重复就ok
4.编写一个方法,去掉数组的重复元素
var arr=["a","c","c","a","a","a","a","a","a","a"]
var arr2=[];
for(var i=0;i<arr.length;i++){
if(arr2.indexOf(arr[i])<0){
arr2.push(arr[i]);
}
}
console.log(arr2);
5.怎样添加、移除、移动、复制、创建和查找节点?
1)创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入
3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值
getElementById() //通过元素Id,唯一性
6.javascript的typeof返回哪些数据类型
Object number function boolean underfind;
7.例举3种强制类型转换和2种隐式类型转换?
强制(parseInt,parseFloat,number)隐式(== – ===)
8.编写一个b继承a的方法
function A(name){
this.name = name;
this.sayHello = function(){alert(this.name+” say Hello!”);};
}
function B(name,id){
this.temp = A;
this.temp(name); //相当于new A();
delete this.temp;
this.id = id;
this.checkId = function(ID){alert(this.id==ID)};
}
9.如何阻止事件冒泡和默认事件
function stopBubble(e)
{
if (e && e.stopPropagation)
e.stopPropagation()
else
window.event.cancelBubble=true
}
return false
10.谈谈This对象的理解。
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。
但是有一个总原则,那就是this指的是调用函数的那个对象。
this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象
11.javaScript中如何检测一个变量是一个String类型,请写出函数实现
var a=”dsds”;
console.log(typeof a);
12.Ajax是什么?Ajax的交互模型?同步和异步的区别
Ajax包含技术JavaScript - ECMA、BOM、DOM、 Xml、XMLHttpRequest。
Ajax交互模型:
1.创建XMLHttpRequest对象
2.客户端与服务器端建立连接
3.客户端向服务器端发送数据
4.客户端接收服务器端发送的数据
同步交互
之前所有的客户端与服务器端的交互
客户端向服务器端发送请求,直到服务器端响应结果,这个过程中,用户不能做任何其他事情
异步交互
目前实现的客户端与服务器端的交互
客户端向服务器端发送请求,直到服务器端响应结果,这个过程中,用户可以做任何其他事情
13.jQuery中的raedy()与 window.onload事件的区别?
ready具有简写写法的
一个HTML页面允许编写多个ready
(速度快)只需等待DOM数结构加载完毕
window.onload
没有任何简写形式
一个HTML页面只许编写一个onload
(速度慢)必须等待HTML所有内容加载完毕
14.谈一谈你对闭包的理解
闭包:保护一个可重用的局部变量的词法结构
为什么: 全局变量: 可重用,但易被污染
局部变量: 不可重用,
何时使用: 即可重用,又不会被污染
如何创建闭包:
1. 外层函数封装受保护的变量以及专门操作变量的内层函数
2. 外层函数将操作变量的内层函数返回到外部
3. 调用外层函数,获得内层函数的对象。
闭包实际操作时
1. 找受保护的变量
2. 同一次外层函数调用返回的内层函数,始终使用同一个受保护的局部变量
3. 每调用一次外层函数,就会多创建一个受保护的变量的副本。
15.javascript中的设计模式有哪些?请尝试说几种,并谈谈你对他的理解。(对js的理解考察的比较深)
第一种模式:js工厂模式
var lev=function(){
return "啊打";
};
function Parent(){
var Child = new Object();
Child.name="李小龙";
Child.age="30";
Child.lev=lev;
return Child;
};
var x = Parent();
alert(x.name);
alert(x.lev());
说明:
1.在函数中定义对象,并定义对象的各种属性,,虽然属性可以为方法,但是建议将属性为方法的属性定义到函数之外,这样可以避免重复创建该方法
2.引用该对象的时候,这里使用的是 var x = Parent()而不是 var x = new Parent();因为后者会可能出现很多问题(前者也成为工厂经典方式,后者称之为混合工厂方式),不推荐使用new的方式使用该对象
3.在函数的最后返回该对象
4.不推荐使用这种方式创建对象,但应该了解
第二种模式:js构造函数模式
var lev=function(){
return "啊打";
};
function Parent(){
this.name="李小龙";
this.age="30";
this.lev=lev;
};
var x =new Parent();
alert(x.name);
alert(x.lev());
说明:
1.与工厂方式相比,使用构造函数方式创建对象,无需再函数内部重建创建对象,而使用this指代,并而函数无需明确return
2.同工厂模式一样,虽然属性的值可以为方法,扔建议将该方法定义在函数之外
3..同样的,不推荐使用这种方式创建对象,但仍需要了解
第三种模式:js原型模式
var lev=function(){
return "啊打";
};
function Parent(){ };
Parent.prototype.name="李小龙";
Parent.prototype.age="30";
Parent.prototype.lev=lev;
var x =new Parent();
alert(x.name);
alert(x.lev());
说明:
1.函数中不对属性进行定义
2.利用prototype属性对属性进行定义
3.同样的,不推荐使用这样方式创建对象
第四种模式:构造函数+原型的js混合的模式(推荐)
function Parent(){
this.name="李小龙";
this.age=32;
};
Parent.prototype.lev=function(){
return this.name;
};
var x =new Parent();
alert(x.lev());
说明:
1.该模式是指混合搭配使用构造函数方式和原型方式
2.将所有属性不是方法的属性定义在函数中(构造函数方式)
将所有属性值为方法的属性利用prototype在函数之外定义(原型方式)
3.推荐使用这样方式创建对象,这样做有好处和为什么不单独使用构造函数方式和原型方式,由于篇幅问题这里不予讨论
第五种模式:构造函数+原型的动态原型模式(推荐)
function Parent(){
this.name="李小龙";
this.age=32;
if(typeof Parent._lev=="undefined"){
Parent.prototype.lev=function(){
return this.name;
}
Parent._lev=true;
}
};
var x =new Parent();
alert(x.lev());
说明:
1.动态原型方式可以理解为混合构造函数,原型方式的一个特例
2.该模式中,属性为方法的属性直接在函数中进行了定义,但是因为
if(typeof Parent._lev=="undefined"){
Parent._lev=true;
}
从而保证创建该对象的实例时,属性的方法不会被重复创建
16.js面向对象中有几大特点?
面向对象三大特点: 封装,继承,多态
封装:将一个事物的属性和方法集中定义在一个对象中
为什么: 单独的数据没有意义,不许附着在一个具体对象
代码重用,便于维护;
继承:父对象的属性和方法,子对象可直接使用
为什么: 节约内存空间;代码重用
多态:同一个事物,在不同情况下表现出不同状态。
为什么: 体现子对象与父对象的差异!
重载: 同一个函数,根据传入参数的不同,执行不同的逻辑
重写: 子对象觉得父对象的成员不好用,可自己定义同名成员,覆盖父对象的成员。
17.document.write和innerHTML的区别
document.wite只能重绘整个页面
innerHTML可以重绘页面的一部分
18.call和apply的区别是什么?
替换this的对象
何时使用: 如果当前this的对象不是想要的,就要替换
相同点: 不向函数中传递参数时,完全相同
不同点: call,要求函数的参数值必须单独传入
apply,要求函数的参数值可用数组传入
19.AngularJs的四大特性
1.采用MVC模式
2.双向数据绑定
3.依赖注入
4.模块化设计
20.谈一谈你对冒泡的理解。
优化: 如果多个子元素,绑定了相同的事件
应该仅在父元素定义绑定一次事件处理函数即可
为什么: 网页中,绑定的事件处理函数的个数越少,页面运行效率就越高!
如何利用冒泡:
1. 获取目标对象:
DOM: e.target
IE8: e.srcElement
兼容模式: var target=e.target||e.srcElement
2. 根据目标对象的不同,执行不同操作