JS问题整理(三)

49 篇文章 1 订阅
37 篇文章 0 订阅

JS踩坑整理(三)

Object.create(null)和Object.create({})的区别

Object.keys()获取对象所有的属性名,返回值为一个数组

let obj = {a:1,b:2,c:3};
console.log(Object.key(obj));
//------输出: ["a", "b", "c"]

JSON.parse("{‘status’:0}")报错

JSON.parse的属性名必须用双引号包起来**’{“status”:0}’**,不然会报错
末尾不能出现逗号,不然也会报错

数组的方法

push:数组尾部添加

pop:数组尾部删除

shift:数组开头删除一个元素,返回删掉的值

unshift:数组开头添加一个或多和元素,返回长度

声明变量的提升

无论在哪个地方声明了变量,js引擎都会将他的声明放在 范围作用域的顶部

函数声明的提升

代码执行之前会读取函数的声明,也就是说函数的调用可以放在函数的声明之前

无论在那个地方声明了变量,js引擎都会将他的声明放在 范围作用域的顶部

函数的声明会覆盖变量的声明

实现异步编程的方式

  1. 回掉函数,优点是方便理解,部署缺点是不利于代码维护阅读,流程会很乱
  2. 事件监听,可绑定多个事件,每个事件可指定多个回掉函数,有利于实现模块化,缺点是程序会变成事件驱动型,运行不清晰
  3. Promises对象,是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口

事件流 事件捕获 事件冒泡

事件流:从页面中接收事件的顺序。也就是说,当一个事件产生时,这个事件的传播过程,就是事件流

事件冒泡:具体到不具体

事件捕获:不具体到具体,最具体的节点最后接收事件

闭包 堆栈溢出 内存泄漏,如何防止内存泄漏

闭包:能够读取其他函数内部变量的函数

堆栈溢出:不顾堆栈重分配的数据块大小,写入过多数据,导致数据越界,覆盖了别的数据,(递归)

settimeout的第一个参数使用字符串而非函数,会引发内存泄漏

防止内存泄漏
  1. 不要动绑定事件
  2. 不要动态添加,用事件冒泡在父容器监听事件
  3. 如果违反以上原则,需要手动销毁 destroy方法
  4. 少创建dom,少绑定事件

什么是自执行函数,用于什么场景以及好处

声明一个函数立即调用【(function(){})()】

创建了一个独立的作用域

优点:防止变量扩散到全局,避免作用于污染利用立即执行特性,返回需要的业务函数或对象,避免每次通过条件判断来处理

事件委托

利用冒泡的原理,将事件添加到父级上,出发执行效果

新添加的元素也会有之前的事件

数组合并

var arr1 = [1,2,3],arr2 = [4,5,6]
//第一种
arr1 = arr1.connet(arr2)
//第二种
 Array.prototype.push.apply(arr1,arr2);
 //第三种
  for (var i=0; i < arr2.length; i++) {
  	arr1.push( arr2[i] );
  }

jquery中get()和eq()

get() :取得其中一个匹配的元素

eq():获取第N个元素

on事件委托

$(function(){
	$("#lists").on("click","li",function(event){
		var target = $(event.target);
		target.css("background-color","red");
	})
})

** $.map和 $.each有什么区别**

map()方法主要用来遍历操作数组和对象,会返回一个新的数组。$.map()方法适用于将数组或对象每个项目新阵列映射到一个新数组的函数;
each()主要用于遍历jquery对象,返回的是原来的数组,并不会新创建一个数组。

jQuery和zepto的区别

zepto是针对移动端的库,有一些触摸事件可以用来做交互如tap swipe等事件

不支持IE浏览器

zepto代码量小,性能比较好

jq中prop和attr的区别

html结构中的元素本身就带的固有属性,使用prop

自定义属性使用attr

预编译语言或预编译处理器

比如sass less

是css的预处理语言,通过编程的方式生成css代码方便实现一些直接编写代码比较困难的代码

由于这些事css的预处理语言,不能被直接用的,必须经过编译

CSS 预处理器是一种语言用来为 CSS 增加一些编程的的特性,无需考虑浏览器的兼容性问题,例如你可以在 CSS 中使用变量、简单的程序逻辑、函数等等在编程语言中的一些基本技巧,可以让你的 CSS 更见简洁,适应性更强,代码更直观等诸多好处

ajax的执行流程

  1. 创建ajax对象,XMLHttpRequest,创建一个异步调用的对象
  2. 创建新的http请求。制定请求方法,url,
  3. 设置响应函数
  4. 发送请求send
  5. 获取异步调用返回的数据

http状态码

200:请求成功
201:请求成功并且服务器创建了新的资源
302:服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。
304:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
400:服务器不理解请求的语法。
404:请求的资源(网页等)不存在
500: 内部服务器错误

split()和join()

split 切割成数组的形式

join将数组转化成字符串

slice() splice()

slice() 方法可从已有的数组中返回选定的元素

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

移动端300ms延迟

当我们点击页面的时候移动端浏览器并不是立即作出反应,而是会等上一小会儿才会出现点击的效果

因为浏览器需要判断用户到底进行的是什么操作,双击或是缩放

js继承的方式

1.使用对象冒充实现继承
2.采用call、Apply方法改变函数上下文实现继承
3.原型链方式继承

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值