前端面试题js

**JS基础

  1. continue和 break有什么区别?
    答案:
    break和continue都是用来控制循环结构的:
    break终止循环,跳出循环体执行循环后面的语句。
    continue跳过本次循环,执行下一次循环。
  2. i++和++i的区别?
    答案:
    i++ :先用i值后加1,
    ++i :先加1后用i值,
    计算:var n=5; 求 var num=n++ + ++n + n++ + ++n +n; //37
  3. JavaScript都有哪些数据类型?
    答案:
    原始类型:数值型/字符串型/布尔型/undefined/null
    引用类型:对象
  4. 自调用函数是什么?用于什么地方?
    答案:立即执行的函数。 (function(){ //函数体 })();
    用于创建一个局部作用域。
  5. slice和splice有什么区别?
    答案:
    slice截取子数组 ,从指定的数组中,截取几个连续的元素组成一个新数组
    splice允许从指定数组中,删除一部分元素,同时再添加另一部分元素
  6. typeof返回的类型有哪些?
    答案:
    number 、string 、boolean 、undefined 、object 、function
    ex:
    var arr=[1,2,3,4,5];
    console.log(typeof(arr)); //object
    function myDemo(){
    return function test(){};
    }
    console.log(typeof(myDemo())); //function
  7. 取 1~11之间的随机数 (即包括1不包括11)?
    答案:
    Math.floor(Math.random()*10+1)
    parseInt (Math.random()*10+1)
  8. 什么是变量声明提前?
    答案:
    使用var关键字声明的变量,会将声明提升到所在作用域的最前边。。
  9. push、pop、shift和unshift 区别?
    答案:
    这两组同为对数组的操作,并且会改变数组的本身的长度及内容。
    不同的是 push()、pop() 是从数组的尾部进行增减,unshift()、shift() 是从数组的头部进行增减。。
  10. 例举4种强制类型转换和3种隐式类型转换?
    答案:
    强制转换:parseInt/parseFloat/Number/toString
    隐式转换:
    字符串+数值 数值转字符串
    数值+布尔型 布尔型中true转为1,false转为0
    字符串+布尔型 布尔型转为字符串。
  11. 函数声明与函数表达式的区别?
    答案:
    相同点:两者都可以创建函数。
    不同点:函数声明可以存在函数提升(前),函数表达式不存在函数提升(前)。
    //函数声明
    function myFunction(){
    function innerFunction() {}
    }
    //以下为函数表达式
    var myFunc = function(){};
    myFunc(function(){
    return function(){};
    } );
  12. 请指出JavaScript宿主对象和原生对象的区别?
    答案:
    宿主对象:指JavaScript解释器提供的对象,由解释器厂家自定义并提供实现,不同的解释器提供的扩展对象存在较大的差异(DOM和BOM对象)。
    原生对象:JavaScript语言本身预定义的对象,在ECMAScript标准中定义,由所有的解释器厂家来提供具体实现(Array,Date,Math,Number,String,Boolean等)。
  13. js中有哪些内置函数?
    答案:Object, Array, Boolean, Number, String, Function, Date, Math, RegExp, Error, Global
    14.列举出获取日期相关函数
    答案:
    console.log(Date.now()); // 返回当前日期和时间’1970/01/01 00:00:00’之间的毫秒值
    var dt = new Date(); // 获取当前时间—年 月 日 时 分 秒
    console.log(dt.getTime()); //返回当前日期和时间’1970/01/01 00:00:00’之间的毫秒值
    console.log(dt.getFullYear()); // 年份
    console.log(dt.getMonth()+1); // 月份(0-11)
    console.log(dt.getDate()); // 日期(0/1-31)
    console.log(dt.getDay()); //星期(0-6)
    console.log(dt.getHours()); // 小时(0-23)
    console.log(dt.getMinutes()); // 分钟(0-59)
    console.log(dt.getMilliseconds); // 返回毫秒(0-999)
    console.log(dt.getSeconds()); // 秒(0-59)
    15.Math相关函数
    答案:
    Math.random() - 返回 0 ~ 1 之间的随机数
    Math.abs(x) - 返回数的绝对值
    Math.ceil(x) - 向上取整
    Math.floor(x) - 向下取整
    Math.round() 四舍五入
    Math.max() 和 Max.min() 获取一组数据中的最大值和最小值
    Math.PI 获取圆周率π 的值
    Math.pow() 获取一个值的多少次幂
    Math.sqrt() 对数值开方
    Math.pow(10,2) = 100;
    Math.sqrt(100) = 10;
    16.null和undefined的区别?
    答案:
    undefined是访问一个未初始化的变量时返回的值,
    null是访问一个尚不存在的对象时所返回的值。因此,可以把undefined看作是空的变量,而null看作是空的对象。
    17.=有什么不同?
    答案:
    == 抽象相等,比较时,会先进行类型转换,然后再比较值;
    ===严格相等,判断两个值相等同时数据类型也得相同。
    18.setTimeout和setInterval的区别是什么?
    答案:
    二者都是用来设置定时操作的。
    setTimeout: 设置一个定时器,在定时器到期后执行一次函数或代码段
    setInterval: 设置一个定时器,以固定的时间间隔重复调用一个函数或者代码段
  14. 请说出以下代码执行结果
    for (var i = 0; i < 3; i++) {
    setTimeout(function() {
    console.log(i);
    }, 0);
    console.log(i);
    }
    答案:0 1 2 3 3 3,执行过程如下
    var i = 0;
    console.log(i); i++;
    console.log(i); i++;
    console.log(i);i++;
    setTimeout(function() {
    console.log(i);
    }, 0);
    setTimeout(function() {
    console.log(i);
    }, 0);
    setTimeout(function() {
    console.log(i);
    }, 0); //输出 0 1 2 3 3 3
  15. 请说出(true+flase)>2+true的执行结果
    答案:false
  16. 当前代码块输出结果是什么?
    var z=10;
    function foo(){console.log(z);}
    (function(funArg){var z=20;funArg();})(foo);
    答案: 10,自调用函数。
  17. setTimeout(function(){},10)表示什么意思?
    答案:每隔10毫秒调用一次函数。
  18. 程序中捕获异常的方法?
    答案:try{

}catch(e){

}finally{

}
24. 以下代码执行结果?
var uname = ‘jack’
function change() {
alert(uname) // ?
var uname = ‘lily’
alert(uname) //?
}
change()
答案:undefined lily
25. 如何使用npm下载express模块?
答案:npm install express
26. split和join的区别?
答案:split()将字符串按照指定的字符分割成一个数组,并返回
join()将数组用指定的字符连接成一个字符串,并返回
27. 看下列代码会有什么样的输出?
var foo = “11”+2-“1”;
console.log(foo);
console.log(typeof foo);
答案:111 number
28. foo = foo||bar ,这行代码是什么意思?为什么要这样写?
答案:这种写法称之为短路表达式
相当于:
var foo;
if(foo){
foo=foo;
}else{
foo=bar;
}
常用于函数参数的空判断
29. 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序
答案:function getRandom(istart, iend){
var iChoice = iend - istart +1;
return Math.floor(Math.random() * iChoice+ istart);
}
var iArray = [];
for(var i=0; i<10; i++){
var result= getRandom(10,100);
iArray.push(result);
}
iArray.sort();
30. 如何获取javascript三个数中的最大值和最小值?
答案:Math.max(a,b,c);//最大值
Math.min(a,b,c)//最小值
31. 实现冒泡排序?
var array = [5, 4, 3, 2, 1];
var temp = 0;
for (var i = 0; i for (var j = 0; j if (array[j] > array[j + 1]){
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}**

你可能感兴趣的:(面试题)