求职告一段落了,虽然不是继续做前端开发,这让我十分难过,但是这里面既然有天意的成分,那我就先干着。虽然说我现在还是没能摸到SAP-ABAP的门道在哪,但是每一样技术的学习本来就是这样的。但是前端的知识我也不打算放弃。曾经我也挺有梦想的,希望能够谢谢博客,能够在别人面前吹嘘吹嘘。有点虚荣的成分在里面,但是现在的我想明白了。博客这种东西是对自己的一种鞭策,一种学习过程的记录,当我年老之时回顾,我不希望回首我的过去,没能给自己留下点什么,当然能够对别人有所帮助也是意外之喜。所以我回来,继续记录着我的编程不归路。
81.如果函数或者方法在调用前带有关键字new则是对构造函数的调用,如果没有传入参数则圆括号可以省略,两者等价
82.构造函数调用创建一个新的对象,这个对象继承自prototype的属性,构造函数试图初始化这个对象,并将其作为上下文。注意上下文指的是新对象
83.构造函数通常不使用return,当构造函数执行完成时,构造函数调用表达式的的值是构造函数返回值,如果return一个对象则返回的为对象,如果return没指定值,或者返回一个原始值则会被忽略,同时使用新对象
84.由于JS的自由函数定义时未指定形参的类型,在函数调用时也未对实参做类型检查.
85.有些参数是可选的,而需要注意的是如果传入的实参的个数小于形参,则后面的参数会设置成undefined,所以最好把可选的参数放在最后,除了用if语句还可以用 a = a || [];这样来选择,但是a必须先声明
86.当实参个数超过形参时,不能直接引用未命名值,而参数对象arguments可以解决这个问题,这是一个类数组对象,可以通过下标来访问而不需要通过名字。
87.为了限制实参的个数与形参的相同,可以事先检查参数对象的length属性的值是否与形参相同,因为JS不会主动做这个工作。
89.把可以接收任意个数参数的函数称为不定实参函数。
90.可以通过callee调用正在运行的函数,通过caller指代调用当前正在运行的函数的函数。
91.为了避免传递多个参数的过于麻烦,把实参保存在对象里,为了避免在程序运行的过程中报错,最好在开始阶段有参数类型检测,这样能够避免后期检查更大的代价。
92.JS里函数除了定义和调用外,还能赋值给变量,数组,对象的属性,同时还可以传递给其他函数。
93.当函数需要一个静态变量时,最好的方法是使用函数的对象的特性,将这个值声明成函数属性的值,这样能够保证某些场景下该变量不会重复。
94.通过用函数来保存部分代码,然后再调用函数来把全局变量变成局部变量。常规的函数声明太复杂,可以声明一个匿名函数,并在声明之后马上调用。
95.函数对象可以通过作用域链相互关联,函数体内部变量都可以保存在函数的作用域中这种特性称为闭包。
96.对于闭包的部分理解,每次调用都会将局部变量保存在一个新对象里,如果函数返回,就会从作用域中删除,如果不存在嵌套函数,则会被回收,如果存在嵌套函数,每个对象对应一个作用域,并指向一个对象。但如果在外部保存,则这个变量绑定对象将会被回收。如果定义在
嵌套函数,或者返回值,这时会有外部引用指向这个嵌套函数,则这个变量不会被回收。
97.关联到闭包的的作用域都是活动的。
98.闭包中除了this的使用需要将他保留在自定义的变量时,arguments保存到另外的变量中才能够让闭包访问外部的数组
99.函数是特殊的对象,函数中arguments.length是传入函数实参的数量,函数本身的length属性则是定义函数时的形参的数量,有些时候需要判断,避免出错。(arguments.callee.length期望的实参个数:定义的形参)
100.prototype原型,call()和apply()用法基本相同(第一个传入的参数是需要的调用的函数),只是第二个之后的传入参数前者是一个个传入后者不同是传入一个数组。
101.bind()将函数绑定在对象上,f.bind(o),将函数f绑定在对象o上
102.Function("x", "y", "return x*y;")用来构造函数,等同于function(x, y) {return x*y;}
103.可调用对象,RegExp正则表达式
104.可以将上次计算的结果存入到缓存中,这种记忆方式的实现是牺牲了空间来换取时间更优。
105.JS里所有实例对象都是从一个原型对象上继承。
106.JS中有三种不同的对象,构造函数对象,原型对象,实例对象。
107.instanceof运算符,左操作数是待检查类的函数,右操作数则是定义类的构造函数。返回值是bool值。检测对象的继承关系
例子:o继承c.prototype,则o instanceOf c返回true。c是一个构造函数。
108.检测原型链上的构造函数的用isPrototypeOf()使用这个函数时不需要以构造函数为构造函数为中介。这两个函数的缺点是不能从对象里知道类名,只能从已知的指定。且对于多框架多页面的支持度不好。
109.constructor检测对象属于某个类,缺点在多个页面和框架下不能很好工作,有些对象不一定含有constructor属性。
110.“鸭式辩型”思想,只关心对象的功能,不关心对象是哪个类的对象。quacks()第一个参数为对象,检测之后的的参数如果是字符串则检测是否在对象内存在以他命名的方法,如果是对象,则检测第一个对象的方法也在该对象内,如果是函数则检测第一个对象的原型函数存在同名的方法。
111.valueOf(),将对象转化成原始值。JSON.stringify(),将对象转化成JSON
112.对象的比较,比较的是引用而不是值,方法的借用,调用其他类的方法。私有状态。
113.构造函数的重载,通过传入不同的值来完成初始化,或者通过工厂方法的类的方法返回一个类的实例。
114.子类的构造函数需要调用父类的构造函数时,称为构造函数的方法链,区别于一般的方法链。
115.确保子类继承父类的实现需要借用inherit()函数
B.prototype = inherit(A.prototype)//子类派生自父类
B.prototype.constructor = B //重载继承来的构造函数
116.构造函数和子类需要通过调用或链接到父类的构造函数和父类方法来实现对父类的方法的调用和扩充。
117.ECMAJS5.0新增的类特性:定义一个类的属性不可枚举,定义不可变的类,封装对象状态(getter, setter),防止类的拓展object.seal()。
118.RegExp正则表达式文本匹配,var patten = /s$/匹配所有以s结尾的字符串 // 等价与创建字符串时的'',等价于var patten = RegExp('s$')。
119.字符串的正则匹配search(),添加一个参数正则表达式,不能全局查找。replace(正则表达式,字符串或函数)通过查找在替换。.match(正则表达式)匹配之前符合条件的返回一个数组。String.spilt(分隔符或者正则表达式)。
120.在html中嵌入JS的四种方法:(1)在html的里,内联。(2)存在一个JS文件里,然后在添加src属性指定的JS里。(3)可以绑定到鼠标事件上onclick和onmouseover等。(4)放在一个URL里,这个URL通过javascript:协议处理
121.将html与JS文件分离是一个重要的思想,能带来许多的便利:内容和行为的分离,简化HTML;多个页面共用时能够一次加载就行了;src这个指向可以是任意URL,能够由其他的服务器提供;更好的使用缓存
122.选择框onchange属性,选择不同的选项时页面可以跟着改变。
123.JS程序执行可以分为:第一阶段,文档载入并执行中的程序,脚本一般按照顺序和条件执行;第二阶段,依靠事件驱动,这个阶段是异步的(内联的脚本可以设置defer(延迟),async(异步))除了控制文档的元素document.write通过这样的声明能够通过此来控制外联脚本的加入。异步的加入脚本时不能有document.write。
124.如果想要一个事件被响应,就要写一个事件处理程序(回调函数)
125.解决兼容性问题,就是解决IE与其他浏览器的兼容问题。IE中存在一些BUG。一些特性的使用可以模拟。
126.IE支持条件注释,开发过程中也要注意一些事情,如禁用脚本,或者屏幕读取(盲人用户),还有独立于设备。多种因素的考虑。
127.安全性的考虑:(1)客户端的js不能够删除客户端用户的文件,不能有通用的网络能力。(2)客户端也要考虑XXS(跨站攻击)要给HTML元素过滤。(3)拒绝服务攻击,占用大量CPU或者控制用户屏幕
128.setTimeout(function(), 1000):实现一个函数在指定毫秒数后执行(1秒后执行)可用clearTimeout()来取消函数的执行。setInterval(function(), 1000)隔1秒调用一次,重复调用可用clearInterval()来阻止后面函数的继续调用。
129.window.location页面的URL,可以分段识别或者取出,如协议,端口等。通过.hash和.search来查找并且解析。
130.location的.assign()可以显示你指定的URL的中的文档,.replace()也类似,但会从浏览历史中将当前文档中删除。.reload可以让浏览器重新载入当前文档。
131.window.History方法有.back()后退;.forward()前进;.go()传入整数
132.弹出对话框alert()弹出一条信息,confirm()显示一条信息需要用户确认或者取消,prompt()提示用户输入信息,并返回。confirm()与prompt()会使代码产生阻塞(如果文档在载入过程则会停止),alert()在大部分情况下也是如此。这三个弹出的是纯文本文件只能进行文本的处理。
133.showModalDialog(URL, {}, 属性设置)和showModallessDialog(),模态窗口在关闭后返回一个window.returnValue。
134.错误处理window.onerror("描述错误信息", "存放错误JS代码的地址","文档中发生错误的行数")。
135.打开新的窗口window.open(url, "新打开窗口的名字", "窗口的参数", 布尔值),返回值为打开窗口的对象。
136.DOM定义了许多方法来选取元素:
用指定的id属性(HTML里元素只允许存在一个唯一的id);
用指定的name属性(name属性可以在HTML元素里不唯一,且name元素只在几种元素内有效包括表单,表单元素,
用指定的标签名字(getElementsByTagName()[]查找指定名字的标签的元素,返回的内容按照文档中的顺序来排列,可以通过数组的形式来读取;Element类中也有这个函数,用来访问指定的元素的同名后代(包含在指定元素里的同样的子元素));
用指定的CSS类(getElementsByClassName()查找指定类名的的元素,类名也可以重复);
匹配指定的CSS选择类(样式表中有强大的查找:#nav //id="nav"的元素;.warning //所有包含class="warning"的元素;div //所有的
元素)
137.可以将HTML理解成一个对象树,可以通过操控节点来达到对文档的操作。document代表文档,elements代表HTML元素
138.innerText或者textContent,是文本的一个属性。
139.文本选择普通浏览器window.getSelection()(缺点:无法使用在 和中的内容),IE浏览器则为document.selection.createRange().text(IE8以后有可以实现elt.value.substring(elt.selectionStart, elt.selectionEnd))
140.
设置为可编辑spellcheck拼写检测,可以设置为false显示关闭。editor.contenteditable.designMode = "on/off"可编辑,不可编辑
141.浏览器定义了多项文本编辑命令document.execCommand("createlike", false, url)。当查询当前的这些编辑是否可用时document.querryCommandState
142.脚本化的CSS样式:内联样式,直接写在标签里;写在样式表里,通过选择器去改变();外联的样式表保存在
143.考虑到不同的浏览器兼容性,有些未标准化的CSS样式带上厂商的名字-moz-,-webkit-,-ms-
144.CSS的position应用到元素的定位,static,absolute相对于父元素的定位,fixed(相对于浏览器的定位,固定位置),relative(先根据基本的文档流进行布局,然后会根据情况来做调整。不会为了填充空间而向各边靠拢)
145.z-index堆叠个数只对兄弟元素有效,堆叠个数可以是正数(对于常规文档流上面)和负数(对于常规文档流的下面)
146.元素的显示与隐藏:visibility时文档内仍会保留其空间,display则不会
147.元素内容部分可见:overflow指定内容超出元素大小时该如何操作:visible(超出部分在外部可见);hidden(裁剪掉超出部分);scroll(允许用户来查看额外的内容);auto(在额外部分存在时才会出现滚动条);clip则明确的指明了该看哪些部分(style="clip: rect(top right bottom left)")
148.脚本化的内联样式可以通过(e.style.来访问并且修改,注意中间有连字符的需要修改不然会报语法错误,当一个CSS样式在JS中是保留字时可以通过加css前缀来实现。还有CSS样式是字符串,当设置高度等数字时要加上引号和单位)
149.CSS动画效果shake()震动或者移动元素fadeOut()通过指定的时间来降低元素的不透明度,使得元素淡出,或者消失。
150.得到计算的样式window.getComputedStyle(要获取的元素名, 空字符或者伪字符串)
151.样式表可以关闭,打开,能够查询,插入,删除样式。
152.一个完整的事件包括,事件的类型,事件的目标,事件的监听和处理,事件对象,事件捕获(防止冒泡,事件传播)。
153.事件的分类:基于设备和手势与触摸(鼠标事件,移动端的触摸与手势),独立于设备的输入事件(click等),用户界面事件(表单中的focus,change,表单提交),状态变化事件(由网络浏览器变化引起的而非用户事件),特定的API(HTML5特性拖放,与vidio标签的实现一些事件),计时器与错误处理事件。
154.window.load在文档和其他外部加载完成后执行,window.unload/beforeunload在用户离开当前也面是执行
155.3级DOM事件设置了一些规范,如textinput事件针对的不只是键盘输入,还有剪切,黏贴...
156.注册处理程序:直接设置元素属性;给元素的属性或者对象传递方法。在除了IE8和之前的浏览器(attachEvent())外有一个标准方法addEventListener()。
157.事件的传播,大部分事件会传到DOM的底部,但是blur,foucus,scroll则是到文档元素。事件的取消,有三种方法event.defaultPrevented(),event.returnValue = false,return false
158.鼠标事件,鼠标滚轮事件,拖放事件,文本事件,键盘事件需要用到特定的效果时,再根据需要去更改与设置。
159.Ajax客户端从服务器拉数据,Comet服务端向客户端推数据。使用基于