2020-12-23

JS基础面试题(一)

1.javascript的typeof返回哪些数据类型

object number function boolean undefined string

eg:

`typeof null;  // object`
typeof isNaN; // function 
typeof isNaN(123); // boolean
typeof [] ; // object
typeof Array.isArray(arr); // boolean
typeof toString.call(); //string
typeof arr.constructor ;// function

2、例举 3 种强制类型转换和 2 种隐式类型转换
强制

(parseInt , parseFloat , Number()

隐式

==)
eg:1 == ‘1’ //true
	null == undefined //true

3、split()和 join() 的区别
split()是切割成数组的形式

eg: var str ='how are you';
//split('切割符',length) 将字符串转为数组
console.log(str.split('o',2)); // ['h','w are y','u']

join()是将数组转换成字符串

eg: var arr=[1,2,3,4,5];
console.log(arr.join('&'));//1&2&3&4&5

4.数组方法pop() push() unshift() shift()
unshift() 头部添加
push() 尾部添加
shift() 头部删除
pop() 尾部删除

eg: var arr=['a','b','c','d','e'];
	console.log(arr.unshift('f'));//['f','a','b','c','d','e']
	console.log(arr.push('g'));//['a','b','c','d','e','g']
	console.log(arr.shift());//['b','c','d','e','g']
	console.log(arr.pop());//['b','c','d','e']	

5、事件绑定和普通事件有什么区别
传统事件绑定和符合 W3C 标准的事件绑定有什么区别?

div.onclick=function(){};
<button on mouseover=" "><button>

①如果说同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定
②不支持DOM事件流 事件捕获阶段 -> 目标元素阶段 -> 事件冒泡阶段

addEventLister

①如果说给同一个元素绑定了两次或者多次相同类型的事件,所有的绑定将会依次触发
②支持DOM事件流
③进行事件绑定传参不需要on前缀
IE9以前:attachEvent/detachEvent
①进行事件类型传参需要带上on前缀
②这种方式只支持事件冒泡,不支持事件捕获
IE9开始, addEventLister

事件绑定是指把事件注册到具体的元素上,普通事件指的是可以用来注册的事件

6、IE 和 DOM 事件流的区别
①执行顺序不一样
②参数不一样
③事件加不加on
④this指向问题
IE9 以前:attachEvent(“onclick”)、detachEvent(“onclick”)
IE9 开始跟 DOM 事件流是一样的,都是 addEventListener

7、IE 和标准下有哪些兼容性的写法
①滚动条距离顶端的距离

var scroll_top=Math.floor(document.documentElement.scorllTop || document.body.scrollTop);

②获取事件对象的兼容

var e=evt||window.event;

③获取事件源的兼容

var target=e.srcElement || e.target;

④获取非行内样式的兼容

function getStyle(obj,attr){
	return obj.currentStyle ? obj.currentStyle[attr] : obj.getComputedStyle(obj,1)[attr];
}

⑤阻止默认行为的兼容

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

stopPropagation//标准浏览器
cancelBubble = true //IE
⑥阻止默认行为的兼容

e.preventDefault ? e.preventDefault() : e.returnValue = false;

注意:return false 既阻止默认行为,又阻止冒泡

8、把两个数组合并,并删除第二个元素。

		var arr1 = ['a', 'b', 'c'];
        var arr2 = ['d', 'e', 'f'];
        var arr3 = arr1.concat(arr2);//拼接数组
        arr3.splice(1, 1);
        console.log(arr3);

9、看下列代码输出为何?解释原因。

var a;
alert(typeof a);//undefined
//alert(b);//报错
b=10;
alert(typeof b);//number

解释:Undefined是一个只有一个值的数据类型,这个值是’undefined’,在使用var 声明变量但并未对其赋值进行初始化时,,这个变量的值就是Undefined。而b由于未声明将报错。
注意:未声明的变量和声明了未赋值的变量是不一样的。
undefined会在以下三种情况下产生:

①一个变量定义了却没有被赋值;
② 想要获取一个对象上不存在的属性或方法;
③一个数组中没有被赋值的元素;

注意区分 undefined 跟 not defnied(语法错误)是不一样的

10、当一个 DOM 节点被点击时候,我们希望能够执行一个函数,应该怎么做?
①直接在DOM里绑定事件:<div onclick="test()"></div>
②在JS里通过onclick绑定: xxx.onclick = test
③通过事件添加进行绑定: addEventListener(xxx, 'click', test)

注意:js的事件流模型都有哪些呢?
“事件捕获阶段”:事件由上到下,由祖先元素向子孙元素依次传递事件的过程;
“时间目标阶段”
“时间冒泡阶段”:事件由下到上,由子孙元素向祖先元素依次传递事件的过程;

DOM事件流:三个阶段  事件捕获、目标阶段、事件冒泡

11、闭包是什么,有什么特性,对页面有什么影响
闭包就是能够读取其他函数内部变量的函数.通俗的讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。
闭包的特性:

①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外 界提供访问接口;

②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调 用之后,闭包结构依然保存在;

对页面的影响:
使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等。
12、javascript 的本地对象,内置对象和宿主对象
本地对象为 array obj regexp 等可以 new 实例化
内置对象为 gload Math 等不可以实例化的
宿主为浏览器自带的 document,window 等
13、document load 和 document ready 的区别

①load是当页面所有资源全部加载完成后(包括DOM文档树,css文件,js文件,图片资源等),执行一个函数

②问题是如果图片资源较多,加载时间较长,onload后等待执行的函数需要等待较长时间,所以一些效果可能受到影响

③$(document).ready()是当DOM文档树加载完成后执行一个函数 (不包含图片,css等)所以
会比load较快执行,在原生的jS中不包括ready()这个方法,只有load方法就是onload事件

14、解释 jsonp 的原理,以及为什么不是真正的 ajax
通过动态创建script标签,设置src属性,指向对方接口地址,并将请求和响应的全局函数传递给后端,对方将数据通过回调函数的方法传递回来。原理是利用了src天然跨域的特点。
Ajax 是页面无刷新请求数据操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值