js部分-高频面试题(第一部分50道)

1.什么是JavaScript?

Js是一种具有面向对象能力的、解释型的程序设计语言。

2.JavaScript与ECMAScript的关系?

ECMAScript是js的规格,js是ECMAScript的一种实现。

3.变量的命名规则?

1.名字见名知义,遵循驼峰标识。例:userName passWord
2.变量名只能以字母,_,$开头
3.不能使用关键和保留字
4.变量名不要相同(后面的会覆盖前面)

4.window.onload的作用?

作用是:当文档和资源都加载完成后执行

5.js数据类型?

基本数据类型:Number、String、Boolean、Undefined、Null
复杂数据类型:Object、Array、Function…

6.null和undefined的区别?

Null访问一个不存在对象返回的值,表示空对象
Undefined:访问一个声明完没有赋值的变量返回的值,表示空变量

7.运算符的种类?

算术运算符:+ - * / % ++ –
赋值运算符:
比较运算符:
逻辑运算符:
三目运算符:

8.var a=10;var b=a++;a、b最后的结果?

b=10,a=11

9.==与===的区别?

===又叫全等,判断的时候先判断数据类型,在判断值
==只判断值是否相等

10.console.log(0.1+0.2==0.3)输出结果

false,有些小数在运算的过程中会出现偏差,因此最好不要用小数作为判断条件(精度丢失)

11.NaN会在什么情况下出现呢?列举出现这样情况的代码?

出现无法计算或者转换结果不是一个数值
1.Number(c)
2.‘a’/3

12.列举三种强制类型转换和2种隐私类型转换。

Number(“10”); 强转为Number
parseInt(“10.5”);强转为number,取整
parseFloat(“10.5”);强转为number,保留小数
String(10); 强转为字符串
10.toString(); 强转为字符串
“10”+20 ; 1020 +号遇到字符串变成连接符,20隐式转换为字符串
1+true; 2 true隐式转换为1
10==“10” “10”隐式转换为10

13.document.write()与innerHTML的区别?

document.write是直接将内容写入页面的内容流,会导致页面全部重绘,
innerHTML将内容写入某个DOM节点,不会导致页面全部重绘

14.break与continue的区别,举例说明并解释原因

break与continue都是在循环中,中止循环操作。Break是结束循环,后面的循环不再执行,continue是结束本次循环,执行下次循环

15.使用for循环打印由星号*组成的菱形?

 //打印上三角
        for (var i = 1; i <= 3; i++) {
     
            for (var k = 1; k <= 3 - i; k++) {
     
                document.write(' ');
            }
            for (var j = 1; j <= 2 * i - 1; j++) {
     
                document.write('*');
            }
            document.write('
'
); } //打印下三角 for (var m = 1; m <= 3; m++) { for (var s = 0; s < m; s++) { document.write(' '); } for (var n = 1; n <= (-2 * m) + 5; n++) { document.write('*'); } document.write('
'
); }

16.this对象的理解?

this存储任何地方,不同环境代表不同的含义,取决于调用时的环境。
A.事件处理函数中的this—触发事件的对象
document.onclick = function(){ alert(this) }
B.普通函数中的this—window
function sum(){ alert(this)} sum()

17.声明函数的方式有哪些?分别举例

函数声明(1),函数表达式(2~5),Function构造器(6)

function func1(a){
     }//函数声明
var func2=function(b){
     }//函数表达式
var func3=function func4(c){
     }//命名式函数表达式
var func5=(function(n1,n2){
     })();//立即执行的函数表达式
return function(){
      };//作为返回值的函数表达式
var func6=new Function()//构造函数声明

18.使用函数计算50、100、150、200、1000以内所有奇数的和?

function sum(num) {
     
            //保存奇数的和
            var sum = 0;
            for (var i = 0; i < num; i++) {
     
                //判断是否为奇数
                if (i % 2 != 0) {
     
                    sum += i;
                }
            }
            console.log(sum);
        }
        sum(50);

19.写一个非行内样式的函数

 function getStyle(elem, attr) {
      //elem,attr
            if (elem.currentStyle) {
      //ie
                return elem.currentStyle[attr];
            } else {
      //标准
                return getComputedStyle(elem)[attr];
            }
        }

20.说说你对作用域链的理解

如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

21.请解释变量提升

浏览器解析js代码至少会经过两个过程,预解析和逐步执行
预解析:找东西var,function,如果找到var,会在内存中存储变量没有值,

function则会存储整个函数 逐步执行:逐行执行代码 console.log(a); //undefined 不会报错

找到var存储了变量a,但是没有赋值默认为 undefined var a = 10; //给内存中的a赋值10
console.log(a); //10

//2.function console.log(sum); //整个函数,找到函数会将整个函数都存储在内存中 sum();
//存储了整个函数,因此可以在前面调用 function sum() { console.log(10+20); }

22.函数声明和表达式声明的区别?

函数声明可以放在页面任意地方,而且都可以调用
表达式声明,需要在表达式声明后调用函数,如果在表达式的前面执行函数,会出现undefined,是因为var把函数名提升了,赋值却没有没提升,所以在赋值之前调用都是undefined

23.定时器的分类?他们的区别及用法是什么?

分为两类:setInterval和setTimeout
setInterval:重复执行或叫间歇执行,即隔一段时间就执行一次
setTimeout:延迟执行,延迟指定时间开始执行,只执行一次

24.生成4位随机验证码?

//四位数验证码
        function getRadom() {
     
            var n = '';
            while (n.length < 4) {
     
                var code = Math.floor(Math.random() * 74) + 48;
                if (code >= 48 && code <= 57 || code >= 65 && code <= 90 || code >= 97 && code <= 122) {
     
                    n += String.fromCharCode(code);
                }
            }
            return n;
        }

25.js有哪些内置对象?

Object Date String Array等等。。

26.把下面字符串去重,并去掉特殊字符,按照数字在前字母在后的顺序排序。
字符串如下:1231fdfsd&2424fdsaff&454545&454545444rfdsfs&687dsag

要求:数组去重,并去掉特殊字符,按照数字在前,字母在后的顺序排序
        var str = '1231fdfsd&2424fdsaff&454545&454545444rfdsfs&687dsag';
        var arr = str.match(/[0-9a-zA-Z]/g);
        var arr0 = [];
        for (var i in arr) {
     
            if (arr0.indexOf(arr[i]) == -1) {
     
                arr0.push(arr[i]);
            }
        }
        var res = arr0.join('');
        console.log(res);

27.截取字符串‘abcdefg’中的efg。

str.slice(3, 6);

28.有这样一个url:http://item.taobo.com/item.html?a=1&b=2&c=&d=xxx&e,请写
一段js程序提取url中各个get参数(参数名和参数个数不确定),将其key-value
形式返回到一个json结构中,如{a:“1”,b:“2”,c:“”,d:“xxx”,e:undefined}

var str = "http://item.taobo.com/item.html?a=1&b=2&c=&d=xxx&e";
        var s1 = str.split('?')[1]; //参数
        var arr = s1.split('&');
        var obj = {
     };
        for (var i in arr) {
     
            var key = arr[i].split('=')[0];
            var value = arr[i].split('=')[1];
            obj[key] = value;
        }
        console.log(obj);

29.判断一个字符串中出现次数最多的字符,并且统计次数

var str = "asddfssssaasswef";
        var obj = {
     };
        //遍历字符串,将出现的字符存入到数组中
        for (var i = 0; i < str.length; i++) {
     
            if (!obj[str.charAt(i)]) {
     
                obj[str.charAt(i)] = 1;
            } else {
     
                obj[str.charAt(i)]++;
            }
        }
        console.log(obj);
        var max = 0;
        var charmax;
        //遍历数组,找出出现最多的字母出现的次数
        for (var key in obj) {
     
            if (obj[key] > max) {
     
                max = obj[key];
                charmax = key;
            }
        }
        console.log("出现最多的字符是" + charmax + ",出现了" + max + "次");

30.DOM常用的API有哪些?

获取子节点
父节点.children
父节点.childNodes

获取父节点
子节点.parentNode
子节点.offsetParent

创建
document.createElement(‘标签名’)
document.createTextNode(‘文本内容’)

添加
父节点.appendChild(子节点)
父节点.insertBefore(newChild,refChild)

复制
被复制的节点.cloneNode(true)

删除:
节点.remove()
父节点.removeChild(子节点)

替换
父节点.replaceChild(newChild,refChild)

31.html和DOM有区别吗?

html是属性节点,
dom元素本质是对象,都有自己的内置属性(property) 叫做dom元素的属性

32.什么是window对象?什么是document对象?

window对象是一个顶级对象指浏览器打开的窗口。
document对象是Documentd对象(HTML文档对象)的一个只读引用,window对象的一个属性。

33.offsetWidth、clientWidth、scrollTop的区别?

offsetWidth----content+padding+border
clientWidth----content+padding
scrollTop-------被卷去的高

34.如何获取url地址中搜索内容?

使用location对象中的search可以获得?后面的字符串,以问号开头

35.IE与火狐的事件机制有什么区别?

IE是事件冒泡
Firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件

36.如何阻止冒泡?兼容

e.stopPropagation?e.stopPropagation():e.cancelBubble = true;

37.事件绑定和普通事件有什么区别?

普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。
addEventListener不兼容低版本IE addEventLisntener还支持事件冒泡+事件捕获

38.如何用原生js给元素绑定两个click事件?

oDiv.addEventListener(‘click’,fun1);
oDiv.addEventListener(‘click’,fun2);

39.解释一下事件流?

事件流:事件被触发之后会在DOM树的节点之间传递
三个阶段:事件捕捉,目标阶段,事件冒泡

  • 事件捕获阶段:当事件发生的时候,将事件从window依次往子元素传递
  • 确定目标阶段:确定事件目标
  • 事件冒泡阶段:事件目标开始处理事件,处理完以后会将事件依次传递给父元素,一直到window 事件都是在事件冒泡处理,ie只有冒泡

40.什么是事件委托?事件委托的原理是什么?他有哪些应用场景?

事件委托就是利用冒泡原理,将子元素所触发的事件,让他的父元素代替执行
一般应用于有新的子元素加入时,可以为后加入的元素添加事件

41.给1000个li添加点击事件。

事件委托,事件加给ul,需要this的地方用e.target代替

42.拖拽效果中有几种事件?

鼠标按下mousedown
鼠标按下过程中鼠标移动 mousemove
鼠标抬起 mouseup

43.什么是回调函数?

回调函数即callback,就是写一个函数,不需要自己去调用执行,让预写好的函数去调用。
自己直接调用的函数是直调,让系统调用的函数就是回调数。

44.数组方法pop() push() unshift() shift()的作用?

Push()在数值末尾添加
Unshift()在数值头部添加
Pop()删除末尾数据
Shift()删除开头数据

45.split() 与join()的区别?

Split()将字符串按照指定字符分割成一个数组
Join()将数组按照指定字符合并为一个字符串

46.编写至少两种数组去重的方法

//1.
//用来保存新数组
     var arr0 = [];
     for (var i in arr) {
     
         //如果新数组中没有出现就保存到新数组
         if (arr0.indexOf(arr[i]) == -1) {
     
             arr0.push(arr[i]);
         }
     }
     
//2.遍历数组进行比较
 for (var i = 0; i < arr.length; i++) {
     
            for (var j = i + 1; j < arr.length; j++) {
     
                //如果发现相等,删除j
                if (arr[i] == arr[j]) {
     
                    //删除j
                    arr.splice(j, 1);
                    //删除j后数组长度减少1,需要j--
                    //否则每删除一个,就会跳过后面的比较
                    j--;
                }
            }
        }

47.[‘1’, ‘2’, ‘3’].map(parseInt);

输出 [1, NaN, NaN]

48.冒泡算法排序?

// 冒泡法:相邻元素作比较,交换位置(小的在前面)
        var arr1 = [4, 3, 2, 1, 5, 6, 7, 9, 8, 0];
        //外层控制多少趟
        for (var i = 0; i < arr1.length; i++) {
     
            //内层控制每趟走多少次,每趟次数减少1(内层循环次数减少1)
            for (var j = 0; j < arr1.length - i; j++) {
     
                if (arr1[j] > arr1[j + 1]) {
     
                    var temp = arr1[j];
                    arr1[j] = arr1[j + 1];
                    arr1[j + 1] = temp;
                }
            }
        }
        console.log(arr1);
        //----------控制台输出------------
        //(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

49.数组的随机排序?

方法一:javascript 
	 	var arr = [1,2,3,4,5,6,7,8,9,10]; 
	    function randSort1(arr){
      
	    	for(var i = 0,len = arr.length;i < len; i++ ){
      
	    		var rand = parseInt(Math.random()*len);
	    		var temp = arr[rand];
	    		arr[rand] = arr[i]; 
	    		arr[i] = temp; 
	    	} 
	    	return arr;    		
	    } 
	    console.log(randSort1(arr));
	方法二:
	 	var arr = [1,2,3,4,5,6,7,8,9,10];
        function randSort2(arr){
     
            var mixedArray = [];
            while(arr.length > 0){
     
                var randomIndex = parseInt(Math.random()*arr.length);
                mixedArray.push(arr[randomIndex]);
                arr.splice(randomIndex, 1);
            }
            return mixedArray;
        }
        console.log(randSort2(arr));
	方法三:推荐
		var arr = [1,2,3,4,5,6,7,8,9,10];
        arr.sort(function(){
     
            return Math.random() - 0.5;
        })
        console.log(arr);

50.找出数组中的最大值,arr=[1,2,3,4,5];

Math.max.apply(Math, arr);	

你可能感兴趣的:(总结一些相关面试题,javascript,前端,面试)