
javascript
暮志未晚NAN
这个作者很懒,什么都没留下…
展开
-
书写一个自运行函数的坑
抛出问题:今天群友提出了一个问题,看题: let b = 1; (function b() { b = 9; console.log(b) })();请问,b打印的值是什么?根据经验来说,大家明眼一看,肯定感觉打印的值是9,因为在上面就赋值了,打印的肯定就是9。可惜事与愿违,这个打印的竟然是函数function b。当场直接蒙蔽,下面...原创 2019-11-15 17:04:16 · 347 阅读 · 1 评论 -
js 使用console计算代码运行时间
需求如果学习前端一定时间以后,就会考虑性能方面的问题。那么问题来了,我们怎么计算出一段代码的运行时间呢?使用console.log配合Date对象计算比如,我们计算sort方法排序十万个随机数组成的数组需要用多长时间的话,可以这么写: var arr = []; for(var i=0; i<100000; i++){ arr.push(Math原创 2017-08-23 17:51:30 · 24251 阅读 · 1 评论 -
js 将Date 日期对象与时间戳互相转换
第一种方法,使用Number()方法 var newDay = new Date(); console.log(Number(newDay));返回当前的时间的时间戳第二种方法是,使用日期对象Date.parse()方法 var newDay = new Date(); console.log(Date.parse(newDay));也会返回当前时间的时间戳原创 2016-12-28 16:39:20 · 33684 阅读 · 0 评论 -
javascript的事件流
今天和群里的小朋友们一起沟通事件流问题,突然发现了自己也有一些没有注意的地方,今天就此更新一篇关于事件流的文章。事件流是什么?DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素节点与根结点之间的路径传播,路径所经过的结点都会收到该事件,这个传播过程可称为DOM事件流。DOM事件流最独特的性质是,文本节点也触发事件(在IE中不会),当鼠标单击“单击此文本”文本时原创 2017-08-15 12:01:26 · 1042 阅读 · 0 评论 -
javascript时间戳和日期字符串相互转换
// 获取当前时间戳(以s为单位)var timestamp = Date.parse(new Date());timestamp = timestamp / 1000;//当前时间戳为:1403149534console.log("当前时间戳为:" + timestamp);// 获取某个时间格式的时间戳var stringTime = "2014-07-10 10:21:12";转载 2017-01-17 19:48:45 · 28537 阅读 · 0 评论 -
js中的typeof和instanceof的用法和区别(附类型判断方法)
typeof作用:用于判断一个一个表达式,(对象或者原始值),返回一个字符串。返回的可能的值(摘自mdn)类型结果Undefined"undefined"Null"object" (历史遗留问题)Boolean"boolean"Number"number"String"s原创 2017-08-03 14:14:01 · 7338 阅读 · 1 评论 -
页面全屏滚动特效(上下或左右)
前言:这个效果是在某个视频中看到的,效果还可以,就保存下来了二话不说,先上代码js的代码如下/*! * PageSwitch 1.0 * */(function($){ "use strict"; /*说明:获取浏览器前缀*/ /*实现:判断某个元素的css样式中是否存在transition属性*/ /*参数:dom元素*/ /*返回值:boolean,有则返回浏转载 2016-10-12 09:17:58 · 5516 阅读 · 4 评论 -
说说JSON和JSONP,也许你会豁然开朗
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现。 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须转载 2016-09-17 11:56:04 · 464 阅读 · 1 评论 -
js 生成随机颜色
function randomColor() { var arrHex = ["0","1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d","e","f"], strHex = "#", index;原创 2017-07-04 17:05:45 · 833 阅读 · 0 评论 -
js 获得盒子距离窗口的距离的集合的函数dom.getboundingclientrect()
rectObject = object.getBoundingClientRect();返回值是一个 DOMRect 对象,这个对象是由该元素的 getClientRects() 方法返回的一组矩形的集合, 即:是与该元素相关的CSS 边框集合 。DOMRect 对象包含了一组用于描述边框的只读属性——left、top、right和bottom,单位为像素。除了 width原创 2017-06-13 14:17:15 · 4767 阅读 · 0 评论 -
js模拟栈的操作
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底原创 2017-07-11 10:59:48 · 1235 阅读 · 1 评论 -
javascript的内存泄漏
一、什么是内存泄漏?程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于持续运行的服务进程(daemon),必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)。有些语言(比如 C 语言)必须手动释放内存,程序员转载 2017-06-09 09:37:30 · 727 阅读 · 0 评论 -
js 通过event获取相关位置的属性
clientX 设置或获取鼠标指针位置相对于当前窗口的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条。clientY 设置或获取鼠标指针位置相对于当前窗口的 y 坐标,其中客户区域不包括窗口自身的控件和滚动条。 offsetX 设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标。 offsetY 设置或获取鼠标指针位置相对于触发事件的对象的 y 坐标。 screenX转载 2017-06-07 10:09:50 · 1936 阅读 · 0 评论 -
js数据存放及处理方式小结
1.全局变量统一定义,以__开头,如:var __data = {};2.局部变量尽量以变量含义字符串,遇特殊字符串需注意,如:function domo() {var tlocation = ''; // 尽量避免与内置对象有冲突的变量名}3.所有数据尽量放在js变量中。3.1.隐藏数据如尽量写在js全局变量中,因为浏览器(如ff)可能会默认将该值缓存,会转载 2017-05-09 10:45:40 · 2248 阅读 · 0 评论 -
js 各种排序方法和sort方法的区别
今天突发奇想,想明白sort方法是否比各种排序都有优势,所以就参考别人的代码,做了一个测试,结果令人惊讶啊,上代码。 图片列表生成交互组件 * { margin: 0; border: 0; } html, body { heigh原创 2017-05-26 10:22:19 · 3659 阅读 · 1 评论 -
使用Math.max和Math.min求数组的最大值和最小值
正常情况下,如果我们求数组的值,用到的就是for循环,如果在代码中经常求最大值和最小值的话,会显得代码很乱。所以,就考虑一中最简单的方法求最大值。使用Math里面自带的max和min方法function getMaxOfArray(numArray) { return Math.max.apply(null, numArray);}直接调用一下上面的函数,就会返回数组中最大的值。原创 2017-04-24 12:03:26 · 21451 阅读 · 5 评论 -
js中Uncaught RangeError: Maximum call stack size exceeded问题
今天在做一个递归函数时,突然控制台给我报了一个Maximum call stack size exceeded这样的错误,我很纳闷,思路很正确,但是为什么会报这样的错误呢。我们今天就聊聊这个错是怎么产生的:这个错误的中文意思就是“最大堆栈超过了最大值”,一般这种错误也是在递归函数当中出现。如果我们要解决问题,那就需要明白错误产生的原因。我们先看一个简单的,也能最清楚明白这个问题出现原创 2017-05-23 15:46:32 · 43554 阅读 · 1 评论 -
Chrome 控制台console的用法
下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用。目前控制台方法和属性有:["$$", "$x", "dir", "dirxml", "keys", "values", "profile", "profileEnd", "monitorEvents", "unmonitorEvents", "inspect", "copy", "clear", "ge转载 2017-08-23 18:19:53 · 3549 阅读 · 0 评论 -
js获取get传值
方法是:function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return unescape(r[2]); retur原创 2016-11-09 10:04:29 · 1855 阅读 · 2 评论 -
js实现页面全屏
进入全屏if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) { // current working methods...原创 2018-12-03 15:39:18 · 5560 阅读 · 0 评论 -
js 如何实现在2d平面上画8
实现这样通过圆画实现这样一个8的形状,首先我们要会画圆。我们可以通过角度转成弧度:radian = angle/180 * Math.PI;再通过弧度获取当前的点的位置,这样最基础的圆的位置在-1到1的位置内var x = Math.sin(radian);var y = Math.cos(radian);当画完一个完整的圆以后,另一个圆的x轴绘制和当前的x轴的位置是...原创 2018-04-29 19:28:03 · 1042 阅读 · 3 评论 -
js相同的正则多次调用test()返回的值却不同的问题
代码是这样的:var reg = /^1[345678][0-9]{9}$/g;console.log(reg.test(15328044636));console.log(reg.test(15328044636));会发现控制台打印的数据却是:truefalse问题原因这是因为正则reg的g属性,设置的全局匹配。RegExp有一个lastIndex属性,来保存...原创 2018-04-26 11:57:33 · 3726 阅读 · 2 评论 -
为什么说DOM操作很慢
一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来。 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为,比如布局(layout)和绘制(paint)。下面主要先介绍下这些浏览器行为,阐述一个页面是怎么最终被呈现出来的,另外还会从代码的角度,来说明一些...转载 2018-03-15 17:18:16 · 1409 阅读 · 2 评论 -
使用js或者jq设置滚动条滚动位置
js原生方法scrollTojs原生设置x轴和y轴就一个方法,首先获取到dom对象,然后设置位置即可,dom.scrollTo(x,y); //x为水平方向的滚动条位置,y为垂直方向的滚动条位置如果只想设置y轴的滚动条位置,首先需要获取到当前x轴的滚动条位置,然后再设置y轴,如:dom.scrollTo(dom.scrollLeft, 100); //设置y轴滚动一百像素原创 2018-01-28 22:45:31 · 60171 阅读 · 4 评论 -
js原生方法被覆盖,从新赋值原生方法
实现原理js的原生方法被覆盖掉以后,如果你还没让原生方法又从新指向一个新的变量名,那就gg了。所以,关键就是怎么再获取到原生的方法。实现的原理呢就是创建一个新的window对象,然后从新的window对象里面获取原生的方法,来重新赋值。使用iframe实现首先创建一个iframe对象,使用document.createElement方法创建var iframe = document.createEl原创 2017-12-22 18:15:21 · 1981 阅读 · 1 评论 -
这些JavaScript编程黑科技,装逼指南,高逼格代码,让你惊叹不已
如何装逼用代码骂别人SB(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]如何用代码优雅的证明自己NB([][[]]+[])[+!![]]+([]+{})[!+[]+!![]]JavaScript 错误处理的方式的正确姿势try { something} catch (e) { window.locat转载 2017-11-21 23:52:44 · 1066 阅读 · 1 评论 -
解决window.colse()不管用的问题
如果你碰到了window.colse()不管用的问题,证明:你这个页面不是js打开的页面,所以骚年别再浪费时间了,浏览器给不了你这么大的权限,好好的研究点别的吧。我写这篇文章就是为了帮你们省点时间,你研究个十年八年也解决不了这个问题。原创 2017-04-18 10:12:02 · 990 阅读 · 0 评论 -
js最简单的双向绑定案例代码
把代码复制放到页面里面运行看一下效果就好了<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><input type="text" id="myinput" ><script> function watch(obj,key,cal原创 2017-10-13 16:57:08 · 701 阅读 · 1 评论 -
js 将canvas生成图片下载,或直接保存一张图片
将canvas数组保存function downLoadImage(canvas,name) { var a = document.createElement("a"); a.href = canvas.toDataURL(); a.download = name; a.click();}canvas:传入canvas的dom对象 name:保存的图片的名字直接将原创 2017-11-06 22:48:41 · 8763 阅读 · 3 评论 -
js实现双向数据绑定
需求现在的框架都讲究什么单向绑定,双向绑定的都是什么东西? - 单向数据绑定:指的是我们先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里面。 - 双向数据绑定:数据模型(Module)和视图(View)之间的双向绑定。就是我不管修改数据模型的相关数据,还是视图上的数据,相对应的数据也会跟着更新。实现原理主要的就是事件的绑定。 -原创 2017-10-10 17:55:46 · 1476 阅读 · 1 评论 -
javascript随机生成一定位数的密码
代码function createPassword(min,max) { //可以生成随机密码的相关数组 var num = ["0","1","2","3","4","5","6","7","8","9"]; var english = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n",原创 2017-09-19 21:31:58 · 3525 阅读 · 0 评论 -
javascript 的"use strict"严格模式
概述除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。为什么用严格模式消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高编译器效率,增加运行速度;为未来新版本的Javascript做好铺垫。“严格模转载 2017-09-27 17:20:45 · 797 阅读 · 1 评论 -
js获取浏览器的get传值
第一种超级省事的方法就是利用正则方法如下: function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return u原创 2016-12-25 20:39:56 · 6614 阅读 · 0 评论 -
js阻止默认右键的下拉菜单
需求正常情况下,我们有可能遇到需要右键不显示下拉菜单的情况,让页面显得更加软件话,删除多余的功能,增加性能。实现代码 document.oncontextmenu = function (event) { event.preventDefault(); };在触发右键下拉菜单的时候,直接阻止掉浏览器的默认事件,就实现了该效果。原创 2017-09-25 10:22:59 · 5194 阅读 · 1 评论 -
js 取消页面可以选中文字的功能
需求有时候需要做的仿软件的功能,就需要取消可以选中文字的功能。这个功能浏览器默认开启,我们就可以使用js取消掉该功能。代码 document.onselectstart = function(){return false;}; //取消字段选择功能只要把这一句话放到页面里面,就可以取消掉字段选择功能。原创 2017-09-25 09:58:44 · 5426 阅读 · 1 评论 -
js处理字符串高亮相关内容,高光
// 高光处理function highlight(text, words, tag){ // 默认的标签,如果没有指定,使用span tag = tag || 'span'; var i, len = words.length, re; for (i = 0; i < len; i++) { // 正则匹配所有的文本 re =原创 2017-05-12 11:12:58 · 2298 阅读 · 0 评论 -
移动端左划右划事件触发简单的代码
Title *{margin:0;padding:0;} ul li {height: 50px; box-sizing: border-box; list-style-type: none; border:1px solid #ccc;} 1 2 3 4 5 1 2 3原创 2017-04-18 16:13:12 · 6108 阅读 · 1 评论 -
js的base64和文本字符串之间互转
/** Convert data (an array of integers) to a Base64 string. */ var toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var base64Pad = '='; function toBas转载 2017-03-16 18:11:47 · 12964 阅读 · 1 评论 -
HTML 事件触发javascript
onabort 图像加载被中断onblur 元素失去焦点onchange 用户改变域的内容onclick 鼠标点击某个对象ondblclick 鼠标双击某个对象onerror 当加载文档或图像时发生某个错误onfocus 元素获得焦点onkeydown 某个键盘的键被按下onkeypress 某个键盘的键被按下或按住onkeyup 某个键盘的键被松开onload 某个页面或图像原创 2016-12-02 18:38:26 · 985 阅读 · 0 评论 -
javascript数字类型number类型方法
toString 把数字转换为字符串,使用指定的基数。toLocaleString 把数字转换为字符串,使用本地数字格式顺序。toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。toExponential 把对象的值转换为指数计数法。toPrecision 把数字格式化为指定的长度。valueOf 返回一个 Number 对象的基本数字值。原创 2016-12-02 18:32:53 · 787 阅读 · 0 评论