一、数据类型
基本数据类型和引用数据类型:
基本数据类型:Number 、String 、Boolean、Null、Undefined
引用数据类型:Object、Array、Function、Data -- Es6(Symbol)
二、typeof 和instanceof 区别?
js是一个弱类型的语言,所以一般想知道当前变量是哪一种类型必须判断类型,都知道判断类型的两种方式:typeof、 instanceof它们各有缺点:typeof适用于基础数据类型判断,引用类型判断都是object。 instanceof 判断一个实例是否属于某种类型,但严重存在原型继承,所以判断最好在两个对象之间
三、如何判断一个变量是不是数组?
array.isArray判断,返回true,说明是数组
instanceof Array判断,返回true。说明是数组
使用Object.prototype.toString.call判断,如果值是[object Array],说明是数组
通过constructor来判断,如果是数组,那么arr.constructor === Array(不准确因为我们可以指定obj.constructor = Array)
四、跨域的几种方法?
通过jsonp跨域
JSONP包含两部分:回调函数和数据。
回调函数:当响应到来时要放在当前页面被调用的函数。
数据:就是传入回调函数中的json数据,也就是回调函数的参数了。
使用window.postMessage方法来跨域(不常用)
window.postMessage(message,targetOrigin) 方法是html5新引进的特性,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源(可实现跨域),目前IE8+、FireFox、Chrome、Opera等浏览器都已经支持window.postMessage方法。
message:为要发送的消息,类型只能为字符串;
targetOrigin:用来限定接收消息的那个window对象所在的域,如果不想限定域,可以使用通配符 “*”。
使用跨域资源共享(CORS)来跨域
CORS:一种跨域访问的机制,可以让AJAX实现跨域访问;CORS允许一个域上的网络应用向另一个域提交跨域AJAX请求。
服务器设置Access-Control-Allow-Origin HTTP响应头之后,浏览器将会允许跨域请求.
就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。
使用Web sockets来跨域
web sockets: 是一种浏览器的API,它的目标是在一个单独的持久连接上提供全双工、双向通信。(同源策略对web sockets不适用)
web sockets原理:在JS创建了web socket之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为web sockt协议。
五、箭头函数与普通函数的区别?
箭头函数没有this、不能使用new 不能绑定arguments,用rest参数...解决
箭头函数不能当做Generator函数,不能使用yield关键字
六、let和var的区别?
1、作用域不同
var是函数作用域,let是块作用域。
let不能在定义之前访问该变量,但是var可以。
let必须先声明,在使用。而var先使用后声明也行,只不过直接使用但没有定义的时候,其值是undefined。var有一个变量提升的过程,当整个函数作用域被创建的时候,实际上var定义的变量都会被创建,并且如果此时没有初始化的话,则默认为初始化一个undefined
在函数中声明了var,整个函数内都是有效的,比如说在for循环内定义的一个var变量,实际上其在for循环以外也是可以访问的
而let由于是块作用域,所以如果在块作用域内定义的变量,比如说在for循环内,在其外面是不可被访问的,所以for循环推荐用let.
七、实现防抖的思路?
八、如何实现链式操作?
链式操作就bai是分步骤地对jQuery对象实du现各种操作,zhi举个dao栗子:
$("#Test").css('color','red').show(200).removeClass('style');
上面的例子就是链式zhuan操作,在一行shu代码里,对id为Test的对象进行了三项操作:先设置其字体颜色为红色,再显示对象,最后移除对象的“style”这个样式。
九、受控组件--非受控组件?
受控组件:
1、每当表单的状态发生变化时,都会被写入到组件的state中
2、在受控组件中,组件渲染出的状态与它的value或checked prop相对应
3、react受控组件更新state的流程.
非受控组件:
1、如果一个表单组件没有value prop就可以称为非受控组件
2、非受控组件是一种反模式,它的值不受组件自身的state或props控制
3、通常需要为其添加ref prop来访问渲染后的底层DOM元素