值类型的类型判断用typeof,引用类型的类型判断用instanceof
一切(引用类型)都是对象,对象是属性的集合
对象都是通过函数来创建的
1、关于闭包
闭包就是能够读取其他函数内部变量的函数。
主要有两种形式
①函数作为返回值
image.png
②函数作为参数被传递
要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”
image.png
2、js捕获异常
try {
throw new Error("Whoops!");
} catch (e) {
alert(e.name + ": " + e.message);
}
image.png
3、原型对象与原型链
image.png
prototype:
每个函数都有一个属性叫做prototype。
这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫做constructor的属性,指向这个函数本身
每个函数function都有一个prototype,即原型。每个对象都有一个proto,可成为隐式原型。
每个对象都有一个proto属性,指向创建该对象的函数的prototype
函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域
在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。
4、阻止冒泡和默认事件
①阻止冒泡:
e.stopPropagation(),IE则是使用e.cancelBubble = true
②阻止默认事件:
e.preventDefault(),IE则是使用e.returnValue = false;
javascript的return false只会阻止默认行为,而是用jQuery的话则既阻止默认行为又防止对象冒泡
5、浏览器解析渲染过程
① 解析HTML生成DOM树。
② 解析CSS生成CSSOM规则树。
③ 将DOM树与CSSOM规则树合并在一起生成渲染树。
④ 遍历渲染树开始布局,计算每个节点的位置大小信息。
⑤ 将渲染树每个节点绘制到屏幕。
6、ajax如何解析json数据,get与post方法的区别
JQ中的Ajax可以使用数据类型dataType:“JSON”定义来接收需要的数据类型原生的AJAX可以使用JSON.parse()来或者JSON.stringify()转换接收的数据类型
get和post都是向服务器发送一种请求,只是发送机制不同
① GET请求会将参数跟在URL后进行传递
POST请求则是作为HTTP消息的实体内容发送给WEB服务器。
② 首先是”GET方式提交的数据最多只能是1024字节”
Post传输的数据量大,可以达到2M。
③ get方式请求数据会被浏览器缓存起来,因此其他人就可以从浏览器的历史记录中读取到这些数据,例如账号密码等。在某种情况下,get方式会带来严重的安全问题。而post方式相对来说就可以避免这些问题。
④ Post请求必须设置Content-Type值为application/x-form-www-urlencoded;
⑤ 发送请求时,因为Get请求的参数都在url里,所以send函数发送的参数为null,而Post请求在使用send方法时,却需赋予其参数;
7、js变量范围
在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量
① 全局变量 -> 在全局范围内都是可以访问的。
② 局部变量 -> 只能在当前作用域进行访问。
全局变量:当前页面内有效
局部变量:方法内有效
8、form中的disable与readonly的区别
共同点:都不能编辑和获取焦点。
①readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效,包括select, radio, checkbox, button等。
②readonly:使用表单post或get传递时会被传递出去。
disable:使用表单post或get传递时不会被传递出去。
③readonly的显示效果是没有灰化的
所有控件都有disabled 属性,但是不一定有readonly属性;
9、css为什么要放在js上面:
当浏览器遇到一个 script 标记时,DOM 构建将暂停,直至脚本完成执行,然后继续构建DOM。
每次去执行JavaScript脚本都会严重地阻塞DOM树的构建,如果JavaScript脚本还操作了CSSOM,而正好这个CSSOM还没有下载和构建,浏览器甚至会延迟脚本执行和构建DOM,直至完成其CSSOM的下载和构建。
CSS 优先:引入顺序上,CSS 资源先于 JavaScript 资源。
JS置后:我们通常把JS代码放到页面底部,且JavaScript 应尽量少影响 DOM 的构建。
10、什么是跨域?怎么解决?
跨域是指一个域下的文档或脚本试图去请求另一个域下的资源
同源策略:
请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.
① 通过jsonp跨域(动态创建script)
② document.domain + iframe跨域
③ location.hash + iframe
④ window.name + iframe跨域
⑤ postMessage跨域
⑥ 跨域资源共享(CORS)
⑦ nginx代理跨域
⑧ nodejs中间件代理跨域
⑨ WebSocket协议跨域
网友评论