js

JS 语言的Function 解析

女生的网名这么多〃 提交于 2020-02-05 12:50:49
1.最基本的作为一个本本分分的函数声明使用。 复制代码 代码如下: function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 复制代码 代码如下: function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 复制代码 代码如下: (function(){ //独立作用域 })(); 4.可以作为选择器使用: 复制代码 代码如下: var addEvent=new function(){ if(!-[1,]) return function(elem,type,func){attachEvent(elem,'on'+type,func);}; else return function(elem,type,func){addEventListener(elem,type,func,false);} };//避免了重复判断 5.以上四中情况的混合应用: 复制代码 代码如下: var class="new" function(){ var privateArg;//静态私有变量 function privateMethod=function(){};//静态私有方法 return function(){/*真正的构造器*/};}; 6

js深浅拷贝

依然范特西╮ 提交于 2020-02-05 11:04:50
首先要清楚js的数据类型,和存储方式(栈,堆)。 对象的赋值其实是将对象名存储在栈中,对应存储的值为堆中数据的引用指针。 基本数据类型的存储则是直接存储在栈中。 浅拷贝:如果对象的属性的值为对象,则保存的为对象的指针,修改指针指向对象的值,则两个对象均会发生变化 Object.assign({},obj1,obj2) obj = {...obj1} 深拷贝:两个对象互相不干扰,修改值不会有影响 1、obj1 = JSON.parse(JSON.stringify(obj2)) 这种方法只能深拷贝对象和数组,不能拷贝函数,循环引用(就是在对象的属性对应的值为对象本身),还不能拷贝(Date,RegExp,Error) 2、for in 循环递归 function deepClone(obj){ if(typeof obj ==='object'){ //判断obj类型,这里只考虑对象和数组 //typeof 返回的值有7种,均为字符串类型 number,string,boolean,undefined symbol,function,object const objClone = Array.isArray(obj)?[]:{}; for(let key in obj){ if(obj.hasOwnProperty(key)){ objClone[key] = deepClone

js数据类型判断和数组判断

℡╲_俬逩灬. 提交于 2020-02-05 10:54:08
js六大数据类型:number、string、object、Boolean、null、undefined string: 由单引号或双引号来说明,如"string" number:什么整数啊浮点数啊都叫数字,你懂的~ Boolean: 就是true和false啦 undefined:未定义,就是你创建一个变量后却没给它赋值~ null: 故名思久,null就是没有,什么也不表示 object: 这个我也很难解释的说。就是除了上面五种之外的类型 --------------------上面的都是浮云,下面的才是神马------------------------------ 数据类型判断之 typeof typeof可以解决大部分的数据类型判断,是一个一元运算,放在一个运算值之前,其返回值为一个字符串,该字符串说明运算数的类型,所以判断某个是否为String类型,可以直接 if(typeof(你的值) == "string"){} 以下是各种数据类型返回结果: var a="string"; console.log(a); //string var a=1; console.log(a); //number var a=false; console.log(a); //boolean var a; console.log(typeof a); //undfined var a =

js数据类型判断和数组判断

一世执手 提交于 2020-02-05 10:43:49
js六大数据类型:number、string、object、Boolean、null、undefined string: 由单引号或双引号来说明,如"string" number:什么整数啊浮点数啊都叫数字,你懂的~ Boolean: 就是true和false啦 undefined:未定义,就是你创建一个变量后却没给它赋值~ null: 故名思久,null就是没有,什么也不表示 object: 这个我也很难解释的说。就是除了上面五种之外的类型 --------------------上面的都是浮云,下面的才是神马------------------------------ 数据类型判断之 typeof typeof可以解决大部分的数据类型判断,是一个一元运算,放在一个运算值之前,其返回值为一个字符串,该字符串说明运算数的类型,所以判断某个是否为String类型,可以直接 if(typeof(你的值) == "string"){} 以下是各种数据类型返回结果: var a="string"; console.log(a); //string var a=1; console.log(a); //number var a=false; console.log(a); //boolean var a; console.log(typeof a); //undfined var a =

js parseInt()与Number()区别

耗尽温柔 提交于 2020-02-05 09:49:40
说到转换成数字类型,我首先想到的是parseInt()方法,后来接触多了才发现还有一个Number()方法,同样是转换成数字类型,这两种方法有什么不同的呢? 1.parseInt(): parseInt(string,radix):将字符串解析转化为数字类型,返回的是整数; string:待被解析的字符串; radix:表示要解析转换的进制 PS:(如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将 返 回 NaN); 栗子: alert(parseInt("10")) ; //10 alert(parseInt("19",10)); //19,1*10^1+9*10^0=19 alert(parseInt("11","2")); //3,1*2^1+1*2^0=3 alert(parseInt("17","8")); //15,1*8^1=7*8^0=15 当遇到数字后带有字符串,则只返回前面的数字(例parseInt(123mgn)=123),如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。 2.Number() Number(object):将对象的值转换为数字; 如果对象的值无法转换为数字,那么

JS设计模式——外观模式

六眼飞鱼酱① 提交于 2020-02-05 09:22:32
什么是外观模式 外观(Facade)模式是属于结构型模式,通过提供外观的包装隐藏系统的复杂性。 火箭发射系统很复杂,但真正使用它的人,可能就需要一个按钮,让它发射就好。那么发射按钮就隐藏了启动程序及发射系统的复杂性。 我们用的各种第三方库,大多也是通过给用户提供 API 来简化和隐藏内部的复杂实现。 实例 现在好多商店都在用微信或者支付宝扫码收款,如果放两个二维码经常会有顾客扫错,那么就可以应用外观模式,将不同的二维码整合成一个,通过系统内部区分。除此之外,我们还可以做额外的扩展。 class PayCode { constructor ( ) { this . record = [ ] } pay ( args ) { if ( args . wechat ) { this . record . push ( { type : 'wechat' , amount : args . amount } ) console . log ( `微信到账 ${ args . amount } 元` ) } if ( args . alipay ) { this . record . push ( { type : 'alipay' , amount : args . amount } ) console . log ( `支付宝到账 ${ args . amount } 元` ) } }

js基础知识点总结

痴心易碎 提交于 2020-02-05 09:16:01
如何在一个网站或者一个页面,去书写你的js代码: 1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs) 2.js的规划():避免全局变量和方法(命名空间,闭包,面向对象),模块化(seaJs,requireJs) 常用内部类:Data Array Math String HTML属性,CSS属性 HTML:属性.HTML属性="值"; CSS:对象.style.CSS属性="值"; class和float 1.class:className 2.float:cssFloat 获取对象 id:document.getElementById("id 名") 事件:用户的动作 鼠标事件: onclick:点击 onmouseover: 鼠标放上 onmouseout:鼠标离开 ondbclick:双击事件 onmousedown:鼠标按下 onmouseup:鼠标抬起 onmousemove鼠标移动 表单事件: onfocus:获取焦点 onblur:失去焦点 onsubmit:提交事件 onchange:当发生改变的时候 onreset:重置事件 键盘事件: onkeyup:键盘抬起 onkeydown:键盘按下 onkeypress:键盘按键一次 窗口时间:onload事件 页面加载完成之后立刻执行的事件 两种方式: 1.

js代码解析原则

本秂侑毒 提交于 2020-02-05 08:57:41
js引擎在读取js代码时会进行两个步骤,第一个步骤是解释,第二个步骤是执行。 解释就是先通篇扫描所有的Js代码,然后把所有声明提升到顶端,第二步是执行,执行就是执行代码的操作。 例: 例子1: <script type="text/javascript"> console.log(a);//输出结果 undefined var a=10; </script> 以上代码输出 undefined 原因: 变量提升 ( 把变量声明提升到当前执行环境的最顶端 ) 上段代码相当于: var a; console.log(a);//由于未赋值 所以输出undefined a=10; 例2: foo(); function foo(){ console.log("aaa"); } 结果输出: aaa 原理: 函数声明提升 ( 函数声明提升直接把整个函数提到执行环境的最顶端 ) 相当于: function foo(){ console.log("aaa"); } foo(); 变量提升只提升函数名 而函数提升会提升整个函数题 注意: 函数提升在变量提升上面 。 例3: foo(); var foo = function(){ console.log("aaa"); } 运行结果是: foo is not a function 原因: 还是进行了 变量提升 相当于: var foo; console

从0开发3D引擎(七):学习Reason语言

大城市里の小女人 提交于 2020-02-05 08:57:10
目录 上一篇博文 介绍Reason Reason的优势 如何学习Reason? 介绍Reason的部分知识点 大家好,本文介绍Reason语言以及学习Reason的方法。 上一篇博文 从0开发3D引擎(六):函数式反应式编程及其在引擎中的应用 介绍Reason Reason又叫Reasonml,是在Ocaml语言的基础上修改而来,由Facebook ReactJs的开发组开发和维护。 Reason是函数式编程语言,由Bucklescript编译器将其编译为 java script语言。 Reason是专门提供给前端开发者使用的,相对于Ocaml,语法上与javascript更为接近。 Reason的优势 1、从“发展前景”来说: 1)大公司Facebook出品,质量、稳定性、后续维护升级有保证 2)Reason是基于OCaml的,因此随着Ocaml的版本更新,Reason和Bucklescript也会支持Ocaml的新特性 3)函数式编程越来越火,它也在3D引擎中越来越多地使用(如Frostbite公司提出的Frame Graph架构和Data Oriented思想都需要结合函数式编程) 2、从“性能”来说: 1)Reason支持mutable的操作和数据结构 可在性能热点处使用它们,提高性能 2)对浏览器的JIT编译友好,提升了运行时性能 因为Reason是强类型语言

js的event对象

99封情书 提交于 2020-02-05 07:50:47
一个完整的事件系统,通常存在以下三个角色: 事件对象,用于储存事件的状态。 event || window.event 事件源对象,当前事件在操作的对象,如元素节点,文档对象,window对象,XMLHttpRequest对象等。 event.target || window.event.srcElement 事件监听器,当一个事件源生成一个事件对象时,它会调用相应的回调函数进行操作。在IE中,事件对象恒为全局属性window.event的分身。 1. event事件对象 1.1 event代表事件的状态。例如触发event对象的元素、鼠标的位置及状态、按下的键等等; 1.2. event对象只在事件发生的过程中才有效。 firefox里的event跟IE里的不同,IE里的是全局变量,随时可用;firefox里的要用参数引导才能用,是运行时的临时变量。 事件对象:IE/Opera:window.event,Firefox:event; 而事件源对象,IE:window.event.srcElement,Firefox:event.target,Opera中两者都可用。 2.事件流 2.1事件冒泡 意思就是说,假如用户单击了一个元素,该元素拥有一个click事件,那么同样的事件也将会被它的祖先触发,这个事件从该元素开始一直冒泡到DOM树的最上层,这一过程称为事件冒泡。 2.2事件捕获