「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」。
js中的可枚举属性和不可枚举属性
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等
属性的枚举性会影响以下三个函数的结果:
for…in
Object.keys()
JSON.stringify
注意:
var kxy = new Person();
Object.defineProperty(kxy, "sex", {
value: "female",
enumerable: false
});
defineProperty为对象定义了一个名为”sex”的不可枚举属性
判断数据类型的方法
- typeof() 特例:typeof(null) =>object,typeof([]) =>object
- instanceof(),通过原型链检查
- 利用constructor,找到其构造函数
- Object.propertype.toString方法返回对象的类型字符串,Object.propertype.toString.call(**);
5.call、apply、bind的区别
三个的作用都是用于改变this的指向问题,但是有一丁点差异,apply和call就是参数的差异,bind和call就是调用方式的差异。
- fun.apply(thisArg,[argsArray])
- fun.call(thisArg, arg1, arg2, ...)
- fun.bind(thisArg, arg1, arg2, ...)//必须手动去调用
6.new的过程
var a = new myFunction("Li","Cherry");
new myFunction{
var obj = {};
obj.__proto__ = myFunction.prototype;
var result = myFunction.call(obj,"Li","Cherry");
return typeof result === 'obj'? result : obj;
}
- 创建一个空对象 obj;
- 将新创建的空对象的隐式原型指向其构造函数的显示原型。
- 使用 call 改变 this 的指向
- 如果无返回值或者返回一个非对象值,则将 obj 返回作为新对象;如果返回值是一个新对象的话那么直接直接返回该对象。
8.防抖he节流
-
防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。
应用场景:用户在填写表单时,输入一个字母就发送一次请求,浪费请求资源,实际上,用户是想输入完整字符的时候才发送请求,这时候就用到防抖了。
-
节流:在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
应用场景:鼠标不断点击触发;监听滚动事件
9.浏览器渲染页面的过程
浏览器请求、加载、渲染一个页面,时间花在下面五件事情上:
- DNS 查询
- TCP 连接
- HTTP 请求即响应
- 服务器响应
- 客户端渲染
浏览器对内容的渲染,这一部分(渲染树构建、布局及绘制),又可以分为下面五个步骤:
- 处理 HTML 标记并构建 DOM 树。
- 处理 CSS 标记并构建 CSSOM 树。
- 将 DOM 与 CSSOM 合并成一个渲染树。
- 根据渲染树来布局,以计算每个节点的几何信息。
- 将各个节点绘制到屏幕上。