js
Muzilh
加油鸭
展开
-
深拷贝与浅拷贝的区别,实现深拷贝的几种方法
转自https://www.cnblogs.com/echolun/p/7889848.html 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这些概念能更好的让你理解深拷贝与浅拷贝。我们来举个浅拷贝例子...转载 2018-08-28 11:09:49 · 34961 阅读 · 3 评论 -
js手动实现call,apply,bind
原文https://www.jianshu.com/p/3b69fb0d4c2f 我也不知道为什么只能显示一部分 好气哦 看原文吧 先分析下3个方法的作用改变this的指向。 传入参数。 call apply返回函数结果, bind 返回新函数call改变this的指向 首先我们知道,对象上的方法,在调用时,this是指向对象的。let o = { ...转载 2018-08-28 11:52:32 · 2509 阅读 · 0 评论 -
js的内存泄露与垃圾回收机制
垃圾回收机制:JS的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。有两种策略来实现垃圾回收:标记清除 和 引用计数;标记清除:js中最常用的垃圾回收方式就是标记清除。当变量进入环境时,例如,在函数中声明一个变量,就将这个变量标记为“进入环境”。从逻辑上讲,永远不...原创 2018-08-28 16:37:54 · 970 阅读 · 0 评论 -
函数防抖和函数节流
函数防抖(debounce)当调用动作过n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间如果有人进电梯(触发事件),那电梯将在10秒钟后出发(执行事件监听器),这时如果又有人进电梯了(在10秒内再次触发该事件),我们又得等10秒再出发(重新计时)函数节流(throttle)预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下......原创 2018-08-28 17:49:33 · 887 阅读 · 0 评论 -
JSONP跨域请求
轻松搞定JSONP跨域请求一、同源策略要理解跨域,先要了解一下“同源策略”。所谓同源是指,域名,协议,端口相同。所谓“同源策略“,简单的说就是基于安全考虑,当前域不能访问其他域的东西。一些常见的是否同源示例可参照下表:在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的。例如我们在自己的网站通过ajax去获取豆瓣上https://developers.douban...转载 2018-08-31 15:56:08 · 153 阅读 · 0 评论 -
跨域请求的方式
js中几种实用的跨域方法原理详解这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。下表给出了相对http://store.company.com/dir/page.html同源检测的结果:要解决跨域的问题,我们可以使用...转载 2018-08-31 16:37:28 · 203 阅读 · 0 评论 -
浏览器输入URL后发生了什么
转自: http://www.xuecaijie.com/it/157.html#1Q64dG0mJ2gKFF本文摘要:1.DNS域名解析;2.建立TCP连接;3.发送HTTP请求;4.服务器处理请求;5.返回响应结果;6.关闭TCP连接;7.浏览器解析HTML;8.浏览器布局渲染;总结 当我们在浏览器输入网址并回车后,一切从这里开始。一、DNS域名解...转载 2018-08-31 17:03:18 · 438 阅读 · 0 评论 -
数组去重
// 方法1 splice直接在原数组上修改 function Duplicate(arr){ var result; for(var i = 0 ; i < arr.length ; i++){ for(var j = i+1 ; j < arr.length ; j+...原创 2018-08-28 22:32:57 · 120 阅读 · 0 评论 -
JavaScript字符串方法
1.charAt() 和 chaeCodeAt()charAt()方法以单字符字符串的形式返回给定位置的那个字符 var stringValue = 'hello world'; console.log(stringValue.charAt(1)); //1字符串'hello world'位置1处的字符是'e',因此调用charAt(1)就返回了"e"...原创 2018-08-21 20:55:47 · 177 阅读 · 0 评论 -
json对象和json字符串之间的转化
// json对象 ----> json字符串 var obj = {name:"ll",age:"20"}; console.log(JSON.stringify(obj)); //{"name":"ll","age":"20"} // json字符串 ----> json对象原创 2018-08-21 22:53:56 · 154 阅读 · 0 评论 -
js创建对象的七种方式
众所周知,虽然对象字面量刻意用来创建单个对象,但是有一个明显的缺点,使用同一个接口创建很多对象,会产生大量重复的代码。为解决这一问题,人们开始使用工厂模式1.工厂模式 function createPerson(name,age){ var o = new Object(); o.name = name; o.a...原创 2018-09-01 15:01:41 · 1619 阅读 · 0 评论 -
一篇文章读懂canvas
一.canvas简介<canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。二.基本用法要使用<canvas>元素,必须设置其width和height属性,指定可以绘图的区域大小,出现开始和结束标签中的内容是...原创 2018-09-04 22:32:36 · 428 阅读 · 0 评论 -
js原生拖拽的两种方法
一.mousedown、mousemove和mouseup 拖着目标元素在页面任意位置如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒。1.onmousedown:鼠标按下事件2.onmousemove:鼠标移动事件3.onmouseup:鼠标抬起事件重点:1、一定要绝对定位,脱离文档流才可以移动。2、绑定拖拽的元素,移动和鼠标松开后是对docu...原创 2018-08-30 11:30:19 · 89203 阅读 · 11 评论 -
var let const的区别是什么?
let和const有很多相似之处,先说一说let吧。原文地址:http://www.cnblogs.com/liuhe688/p/5845561.html1. let添加了块级作用域我们知道,JavaScript是没有块级作用域的,如果在块内使用var声明一个变量,它在代码块外面仍旧是可见的: if (true) { var foo = 3;}console.l...转载 2018-09-06 10:00:31 · 402 阅读 · 0 评论 -
['1','2','3'].map(parseInt)
为啥子会是这样呢?是因为我没有理解:1)map函数传递参数的定义,2)parseInt函数针对于radix这个参数的理解。通常使用map函数的时候都会传入一个函数,这个函数一般只使用1-2个参数,let arr = ['1','2','3'].map(function(item){ //1个参数 return item;});//["1", "2", "3"]let arr...转载 2019-03-13 18:55:09 · 2247 阅读 · 0 评论 -
dom的·常用操作
Dom节点操作常用方法1.访问/获取节点document.getElementById(id); //返回对拥有指定id的第一个对象进行访问document.getElementsByName(name); //返回带有指定名称的节点集合 document.getElementsByTagName(tagname); //返回带有指定标签名的对象...转载 2018-08-20 22:17:45 · 190 阅读 · 0 评论 -
js中的new做了什么?
function Person () { this.name = name; this.age = age; this.sex = sex this.sayName = function () { return this.name; };} var person = new Person("tom", 21, "famle");...原创 2018-08-23 16:51:30 · 11836 阅读 · 2 评论 -
JavaScript 运行机制
一、为什么JavaScript是单线程?JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScri...原创 2018-08-22 21:35:11 · 176 阅读 · 0 评论 -
ES6 Promise对象的用法
ES6规定,Promise对象是一个构造函数,用来生成Promise实例new 一个Promise对象 var p = new Promise(function(resolve,reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成...原创 2018-08-09 15:41:13 · 3232 阅读 · 1 评论 -
作用域及作用域链
作用域作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域有:全局作用域和局部作用域全局作用域:任何函数的内部都可以访问的到<script> var oute = "outer"; function fn(){ console.log(oute); } ...原创 2018-08-07 12:20:13 · 249 阅读 · 0 评论 -
call,apply,bind的区别
为什么需要这些?主要是因为this,来看看this干的好事。box.onclick = function(){ function fn(){ alert(this); } fn();};我们原本以为这里面的this指向的是box,然而却是Window。一般我们这样解决:box.onclick = function(){ var _this = this;...转载 2018-08-07 13:51:09 · 174 阅读 · 0 评论 -
js中的事件委托
事件委托: 对'事件处理程序过多'问题的解决方案就是事件委托 事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件 举个例子:页面上有这么一个节点树,div>ul>li>a;比如给最里面的a加一个click点击事件,那么这个事件就会一层一层的往外执 行,执行顺序a>li>ul>div,有这样一个机制,那么我们给...原创 2018-08-07 19:33:22 · 120 阅读 · 0 评论 -
Ajax
第一步:创建XmlHttpRequest对象注意:如果要兼容IE6以下浏览器则需要编写如下代码 function createXHR(){ var xhr; if(window.XMLRequest){ xhr=new XMLRequestHttpRequest(); //IE7、IE8、360等 ...原创 2018-08-12 11:30:36 · 131 阅读 · 0 评论 -
梳理一些简单的编程题(一)
1. 找出元素item在给定数组arr中的位置 function indexOf(arr,item) { if(Array.prototype.indexOf){ return arr.indexOf(item) }else{ for(var i = 0 ; i<...原创 2018-08-12 20:32:09 · 2502 阅读 · 0 评论 -
梳理一些简单的编程题(二)
1. 合并数组arr1和arr2.不要直接修改数组arr,结果返回新的数组 // 利用concat function concat(arr1,arr2){ return arr1.concat(arr2); } // 利用slice+push function concat(arr1,a...原创 2018-08-12 21:43:11 · 500 阅读 · 0 评论 -
js闭包
什么是闭包?要学习闭包,首先要知道变量的作用域,可以参考这篇文章https://blog.csdn.net/weixin_41910848/article/details/81477581闭包的概念:《JavaScript高级程序员设计》上是这样定义的:闭包是指有权访问另一个函数作用域中的变量的函数我的理解就是闭包就是能够读取其他函数内部变量的函数。所以,在本质上,闭包就是...原创 2018-08-15 12:47:30 · 171 阅读 · 0 评论 -
继承的方法
一 子类的原型继承 ----- 类式继承也就是将子类型的原型指向父类型的实例 (子类型.prototype = new 父类型)。 //声明父类function SuperClass(){this.supperValue = true;};//为父类添加共有方法SuperClass.prototype.getSupper...原创 2018-06-20 21:55:04 · 752 阅读 · 0 评论 -
冒泡排序和快排
1.冒泡排序冒泡排序要点:1、 两层循环,外层循环控制走访数列重复进行的次数,内层循环进行数据的比较、交换,是数据“上浮”。2、 内层循环是相邻的数据进行比较。 <!--冒泡排序--> <script type="text/javascript"> var bubbleSort = function(arr){ for ...原创 2018-08-08 13:15:16 · 580 阅读 · 0 评论 -
typeof用法
typeof操作符返回一个字符串,表示未经计算的操作数的类型。 类型 结果 Undefined "undefined" Null "object"(见下文) Boolean "boolean" Number "number" String "string" Symbol (ECMAScript 6 新增) "symbol&q原创 2018-08-13 10:05:07 · 27800 阅读 · 1 评论 -
js中的instanceof运算符
概述instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上语法obj instanceof Object;//true 实例obj在不在Object构造函数中描述instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。实例1.instan...转载 2018-08-13 11:16:01 · 2527 阅读 · 0 评论 -
数组和链表的区别
原文地址 http://blog.csdn.net/qq_25806863/article/details/70607204 数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点。大致总结一下特点和区别,拿几个人一起去看电影时坐座位为例。数组的特点在内存中,数组是一块连续的区域。 拿上面的看电影来说,这几个人在电影院必须坐在一起。 数组需要预留空间,在使...转载 2018-08-13 11:25:27 · 141 阅读 · 0 评论 -
正则
举几个例子 // 匹配16进制颜色值 // 要求匹配:#ffbbad #Fc01DF #FFF #ffE // 表示一个16进制字符,可以用字符组[0-9a-fA-F]。其中字符可以出现3或6次,需要是用量词和分支结构。使用分支结构时,需要注意顺序。 var regex = /#[0-9a-fA-F]{6}|[0-9a-f...原创 2018-08-13 11:36:41 · 853 阅读 · 0 评论 -
JavaScript本地对象、内置对象、宿主对象和自定义对象
在ECMAScript中,所有对象并非同等创建的。 一般来说,可以创建并使用的对象有4种:本地对象、内置对象和宿主对象,自定义对象。1. 本地对象 ECMA-262把本地对象(native object)定义为“独立于宿主环境的ECMAScript实现提供的对象”。 何谓宿主环境? “宿主”,生物学上,一般是指寄生的生物体选择的寄生体,如:火影里的“白...转载 2018-08-22 17:23:51 · 466 阅读 · 0 评论 -
HTML5的自定义属性的使用总结
以前我们需要自定义属性的时候一般是这样做的,在标签里面加上我们自己设置的一些属性:<div id="myDiv" user-defined-attribute="value">在标签里设置自定义属性</div> 然后获取里面的值是使用getAttribute来获取自定义属性里面的值:var myDiv = document.getElementById(...转载 2018-08-22 21:09:12 · 2139 阅读 · 0 评论 -
Array类型的方法
1.push()和pop()方法push()方法可以接受任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度。pop()方法是从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。举个例子: var colors = new Array(); var count = colors.push('red','blue'); ...原创 2018-08-09 11:07:22 · 435 阅读 · 0 评论