js基础⾯试题整理(包含ES5,ES6)
写⼀下 Javascript 的原始类型
原始类型:number,string,boolean,null,undefined
引⽤类型:object。⾥⾯包含function,Array,Date
Typeof null // 输出object(null 被认为是对象的占位符)
例举3种强制类型转换和2种隐式类型转换?
强制(parseInt, parseFloat, number)
隐式(== ===)
parseInt() 函数可解析⼀个字符串,并返回⼀个整数。
parseFloat() 函数可解析⼀个字符串,并返回⼀个浮点数。
Number() 函数把对象的值转换为数字。
注意使⽤parseFloat()时:
1.字符串中只返回第⼀个数字。
2. 开头和结尾的空格是允许的。
3. 如果字符串的第⼀个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
列举⿏标事件。
onClick ⿏标点击事件
onDblClick 双击事件
onMouseOver ⿏标经过
onMouseOut ⿏标移出
onMouseDown ⿏标上的按钮被按下了
onMouseUp ⿏标按下后,松开时激发的事件
表单相关事件
onFocus 获得焦点
onBlur 失焦
onChange 改变⽂本框内容触发
onSubmit ⼀个表单被提交时触发的事件
数组⽅法pop() push() unshift() shift()
push() 数组尾部添加
pop()尾部删除
unshift() 数组头部添加
shift()头部删除
数组的截取和合并
concat() 合并数组
var arr =[1,2,3];
var arr1 =[4,5,6];
var arr2 = at(arr1);
console.log(arr2);// [1,2,3,4,5,6];
slice() 来截取数组。
var arr =[1,2,3];
console.log(arr.slice(0,1););// [1];
// slice⽅法接受两个参数,⼀个从哪⾥开始,⼀个是到哪⾥结束(但是不包括这个结束的元素本⾝)。如果是负数,就从倒数第⼏个。删除指定数组
splice()从数组中添加/删除项⽬,然后返回被删除的项⽬
var arr =[1,2,3];
arr.splice(0,1);//从数组下标0开始,删除1个元素
console.log(arr);// [2,3];
// 接受两个参数,第⼀个是index,数组开始的下标,第⼆个是len,要删除的长度
数组元素的排序
reverse()颠倒数组中元素的顺序
let a =[1,2,3];
console.log(a);// [3,2,1]
sort()⽅法对数组元素进⾏排序,并返回这个数组。
sort排序常见⽤法:数组元素为数字的升序、降序:
var array =[10,1,3,4,20,4,25,8];
array.sort(function(a,b){
return a-b;//升序
});
console.log(array);// [1,3,4,4,8,10,20,25];
var array =[10,1,3,4,20,4,25,8];
array.sort(function(a,b){
return b-a;//降序
});
console.log(array);// [25,20,10,8,4,4,3,1];
数组转字符串
join()⽅法⽤于把数组中的所有元素通过指定的分隔符进⾏分隔放⼊⼀个字符串,返回⽣成的字符串
let a=['hello','world'];
let str=a.join();// 'hello,world'
let str2=a.join('+');// 'hello+world'
关于数组具体实例可参考
JS中提取字符串的⽅法
substring(start,end)表⽰从start到end之间的字符串,包括start位置的字符但是不包括end位置的字符。
var src="images/off_1.png";
alert(src.substring(7,10));//off
字符串实现倒序输出
newStr = arr.split('').reverse().join('')
数组去重?
此题看着简单,但要想⾯试官给你⾼分还是有难度的。⾄少也要写出⼏种⽅法
js
var array=['12','32','89','12','12','78','12','32'];
// 最简单数组去重法
//新建⼀个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,
//如果有相同的值则跳过,不相同则push进数组。
function unique1(array){
var n =[];//⼀个新的临时数组
for(var i =0; i < array.length; i++){//遍历当前数组
if(n.indexOf(array[i])==-1)
n.push(array[i]);
}
return n;
}
arr=unique1(array);
// 速度最快,占空间最多(空间换时间)
function unique2(array){
var n ={}, r =[], type;
for(var i =0; i < array.length; i++){
type =typeof array[i];
if(!n[array[i]]){
n[array[i]]=[type];
r.push(array[i]);
}else if(n[array[i]].indexOf(type)<0){
n[array[i]].push(type);
r.push(array[i]);
}
}
return r;
}
//数组下标判断法
function unique3(array){
var n =[array[0]];//结果数组
for(var i =1; i < array.length; i++){//从第⼆项开始遍历
if(array.indexOf(array[i])== i)
n.push(array[i]);
}
return n;
}
es6
es6⽅法数组去重,第⼀种⽅法
let arr =[1,2,3,4,2,1,2,3,4,12,3,1,2,31,1]
let s =[...new Set(arr)];
es6⽅法数组去重,第⼆种⽅法
function dedupe(array){
return Array.from(new Set(array));//Array.from()能把set结构转换为数组
}
数组的遍历?
⼀般有3种⽅法遍历数组:
1. for循环
2. for each ( ES5 新增)
3. for… in
1.1 使⽤普通for循环遍历数组
var arr =[50,20,10,5,15,6];
for(var i =0; i < arr.length; i++){//数组长度多长,就遍历多少次。循环变量作为数组的下标  console.log(arr[i]);
}
2.1 使⽤for …each遍历数组
ES5为每个数组新增了⼀个⽅法 array.forEach(function) ,使⽤这个⽅法,可以⾃动帮我们遍历数组中的所有元素var arr =[50,20,10,5,15,6];
//调⽤数组的forEach⽅法,传⼊⼀个匿名函数
//匿名函数接受两个参数:参数1--迭代遍历的那个元素参数2:迭代遍历的那个元素的下标
//可以在匿名函数内部书需要的代码
arr.forEach(function(element, index){
alert(element);
});
3.1 使⽤ for…in 循环遍历数组
for-in 语句是⼀种精准的迭代语句,可以⽤来枚举对象的属性和数组的元素。⽰例:
var arr =[50,20,10,5,15,6];
// 每循环⼀轮,都会把数组的下标赋值给变量index,然后num就拿到了每个元素的下标。
//注意:这⾥index是元素的下标,不是与元素
//对数组来说,index从从0开始顺序获取下标
jquery框架面试题for(var index in arr){
console.log(num);//循环输出: 0 1 2 3 4 5
}
//这⾥var 关键字也是可以省略的,但是不建议省略。
for(i in arr){
console.log(arr[i]);
}
列举出两个伪数组,如何转化成数组?
伪数组:有函数三要素(下标,元素,长度),没有数组的api
var weiArr ={
0:22,
1:44,
2:55,
3:77,
4:99,
length:5
}
**⽅法⼀:声明⼀个空数组,遍历伪数组,将伪数组中的元素添加到真数组中**
var arr=[];
for(var i =0;i<weiArr.length;i++){
arr.push(weiArr[i]);
}
**⽅法⼆(常⽤):arr.push.apply(arr,伪数组)**
var arr=[];
arr.push.apply(arr,weiArr);
//不需要修改push的this,只是利⽤apply的传参特点
console.log(arr);
**⽅法三 arr.slice(0):如果是固定参数0,则会返回数组⾃⾝**
//call(weiArr,0)  : 把slice()中的this 从原型对象修改为伪数组
weiArr=Array.prototype.slice.call(weiArr,0)
IE和标准下有哪些兼容性的写法
var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target
ajax请求的时候get 和post⽅式的区别
⼀个在url后⾯ ,⼀个放在虚拟载体⾥⾯
get有⼤⼩限制(只能提交少量参数)
安全问题
应⽤不同 ,请求数据和提交数据
ajax请求时,如何解析json数据
使⽤JSON.parse
var jsonDate ='{ "name":"hello","age":23 }';
var jsonObj =JSON.parse( jsonDate );
如何中断ajax请求?
⼀种是设置超时时间让ajax⾃动断开,另⼀种是⼿动停⽌ajax请求,其核⼼是调⽤XML对象的abort⽅法,ajax.abort()
事件委托是什么??
利⽤事件冒泡的原理,让⾃⼰的所触发的事件,让他的⽗元素代替执⾏!
事件委托利⽤事件冒泡原理来实现,何为事件冒泡?就是事件从最深节点开始,然后逐步向上传播事件,⽐如页⾯有⼀个节点树,div > ul > li > a, 给最⾥⾯a加⼀个click点击事件,那么这个事件就会⼀层层往外执⾏,执⾏顺序 a > li> ul > div,既然有这样⼀个机制,那么我们给最外⾯的div加点击事件,那么⾥⾯的ul,li,a做点击事件的时候,都会冒泡到最外层的div,所以都会触发,这就是事件委托,委托他们的⽗系级代为执⾏事件。
如何阻⽌事件冒泡?
event.stopPropagation();
<script type="text/javascript">
$(function(){
$("#hr_three").click(function(event){
event.stopPropagation();
});
});
<script>
可参考:
如何阻⽌默认事件?
2.event.preventDefault();
//return false; 事件处理过程中,阻⽌了事件冒泡,也阻⽌了默认⾏为
<script type="text/javascript">
$(function(){
  $("#hr_three").click(function(event){
    return false;
  });
});
<script>
//event.preventDefault(); 事件处理过程中,不阻击事件冒泡,但阻击默认⾏为
<script type="text/javascript">
$(function(){
  $("#hr_three").click(function(event){
    event.preventDefault();
  });
});
<script>
Javascript的事件流模型都有什么?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。