1、怎样辨别一个变量是数组还是字符串?

可以借助typeof操作符。

2、“==”与“===”的区别?

“==”是相等运算符,会进行隐式类型转换。
“===”是严格运算符,会同时判断值和类型。

3、如何去除字符串中的所有空格?

function trim(str){
return str.replace(/\s|\xA0/g,””);
}

4、如何获取当前浏览的URL?

window.location.href

5、怎样添加、删除、移动、复制、创建和查找节点?

1)创建新节点

createDocumentFragment() //创建一个DOM片段

createElement() //创建一个具体的元素

createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替换

insertBefore() //插入

3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的Name属性的值

getElementById() //通过元素Id,具有唯一性

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

6、什么是闭包?

闭包就是能够读取其他函数内部变量的函数。

7、JS中const、let、var之间的区别

1)const定义的变量不可以修改,而且必须初始化。

2)var定义的变量可以修改,如果不初始化会输出undefined,不会报错。

3)let是块级作用域,函数内部使用let定义后,对函数外部没有影响。

8、什么叫同源策略?有什么用?

同源策略是指域名、协议、端口都相同,只有同源的脚本才会被执行。

9、什么是Ajax?适用于哪些应用场景?

Ajax是一种无需重新加载整个网页,就能更新部分网页的技术。
例如:无刷新判断验证码是否输入正确等。

10、Ajax请求时get和post有什么区别?

1)get参数放在url后面,post放在http body里面
2)有大小限制,get受url长度限制,post受内存限制
3)安全方面,get明文传输安全性较差
4)应用场景不同,get用于获取数据,post用于提交数据

11、谈谈Jsonp的原理?

动态创建script标签,结合回调函数。

12、split()和join()函数的区别?

前者是将字符串切割成数组,后者是将数组转换成字符串。

13、写出3个使用this的典型应用。

1)事件:如onclick,this指向发生事件的对象
2)构造函数:this指向new出来的对象
3)call/apply:改变this的指向

14、怎么使用JS改变元素的class?

object.ClassName = xxxx

15、普通事件与绑定事件有什么区别?

普通事件只支持单个事件处理,而事件绑定可以添加多个事件处理。

16、请描述js里事件的三个阶段。

捕获、处于目标阶段、冒泡阶段(IE8及以下版本只支持冒泡)

17、数组方法pop()、push()、unshift()、shift()都有什么用?

push():向数组尾部添加元素
pop():删除数组尾部的元素
unshift():向数组头部添加元素
shift():删除数组头部的元素

18、IE和DOM事件流的区别是什么?

1)执行顺序不同
2)参数不同
3)事件是否加on
4)this指向不同

19、call和apply有什么区别?

call与apply的区别在于参数的写法不同:

a.call(b,arg1,arg2,…)
a.apply(b,[arg1,arg2,…])

20、什么是事件委托?

利用事件冒泡的原理,让子元素触发的事件,由其父元素代替执行。

21、JS中的本地对象、内置对象和宿主对象分别有哪些?

本地对象:array、obj、regExp等可以通过new实例化的对象
内置对象:Math等不可以实例化的对象
宿主对象:document、window等浏览器自带的对象

22、document load 和 document ready 的区别是什么?

load必须等到页面内包括图片的所有元素加载完毕后才能执行。ready是DOM结构绘制完成后就执行,不必等到所有资源加载完毕。

23、你怎么理解WebPack、Grunt和Gulp?

该标准从一开始就是针对JavaScript语言制定的,之所以不叫JavaScript,有两个原因。一是商标问题,Java是Sun公司的商标,根据授权协议,只有Netscape公司可以合法使用JavaScript这个名字,且JavaScript本身也已被Netscape公司注册为商标。二是为了体现这门语言的制定者是ECMA,而非Netscape,这样有利于保证语言的开放性和中立性。

因此,ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现(另外的ECMAScript方言还有Jscript和ActionScript)。在日常使用中,这两个词可以互换。

26、ES6有哪些新特性?

箭头操作符;对class的支持(包含constructor构造函数);不定参数…x;let和const关键字;for
of遍历;模块支持import;promise异步函数处理模式(pending等待中;resolve返回成功,reject返回失败);

27、typeof都会返回什么数据类型?

Object、number、function、boolean、undefined

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

29、如何截取字符串javastack中的java部分?

30、如何规避javascript多人开发时的函数重名问题?

31、检测一个变量是否是String类型有哪几种方式?

1)typeof(obj) == ‘string’
2)obj.constructor == String;

32、请说出至少三种减少页面加载时间的方法。

1)压缩css、js文件
2)合并js、css文件,减少http请求
3)将外部js、css文件放在页面底部
4)减少dom操作,尽可能用变量替代不必要的dom操作

33、请详细解释Ajax的工作原理。

1)创建ajax对象(XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp))
2)判断数据传输方式(GET/POST)
3)打开链接 open()
4)发送 send()
5)当ajax对象完成第四步(onreadystatechange)数据接收后,判断http响应状态(status)在200-300之间或者为304(缓存)时,执行回调函数

34、JS中有哪几种函数?

具名函数(命名函数)和匿名函数。

35、请至少写出3种创建函数的方式。

1)声明函数

function fn1(){}

2)创建匿名函数表达式

var fn1 = function (){}

3)创建具名函数表达式

var fn1 = function javastack(){};

36、什么是跨域?解决跨域的方法有哪些?

由于浏览器的同源策略,只要发送请求的url的协议、域名、端口三者中任意一个与当前页面地址不同,就属于跨域。

解决方案:JSONP、CORS、代理、服务器端处理等。