JavaScript知识:
1、HTML元素上的事件onclick,onmouseover(鼠标移入),onmouseout等是HTML语言定义的标准,是HTML语言和脚本语言沟通的渠道。事件的执行可以是javascript语言、还可以是vbscript语言等脚本语言。
2、HTML <script> 标签用于定义客户端脚本。 所以script标签是属于HTML标准的,用于定义页面的脚本。必需的 type 属性规定脚本的 MIME 类型,如:<script type="text/javascript"> </script>。 script 元素既可以用来包裹脚本语句,也可以通过 src 属性指向外部脚本文件。
2、<div onclick="div1.style.display='none';" id="div1> </div> 这样直接在事件内写代码会很乱,而且这样直接在事件内写代码且使用ID存在浏览器兼容性问题。但是document.getElementById在任何浏览器下均可支持使用。
而且,document.getElementById不仅解决了兼容性问题,在改变元素属性和样式方面的便捷和jquery差不多,如:
var oDiv1 = document.getElementById("div1"); oDiv1.value="111"; oDiv1.style.border = "1px solid black;
总结:HTML中元素的属性和样式style的键值对怎么写,JS中就怎么写。唯一的例外是改变元素的class必须用ele.className="box" ,因为class是js中的保留字(关键字)。
3、使用 标签在 HTML 中创建链接。 注意: 标签中必须提供 href 属性或 name 属性。
href属性的值可以是:网页URL,页面中的锚,或者JS代码。 name属性创建文档内的书签(锚)。
例子:
<a href=“javascript:;”></a> 或者 <a href=“javascript:void(0);”></a> 用于置空<a>标签,javascript后可以放js代码,但是这样写不好。
定义锚: <a name="mao">锚</a> 使用锚:<a href=“#mao></a> 此外:<a href=“#></a> 会跳到页面顶部。
4、网页换肤实现:通过js改变引入的css文件实现(不同的css给body,input等元素指定了不同的颜色)
5、js中操作对象属性的两种方法: var divEle = document.getElementById("div1"); (PS:JS中一切皆对象)
第一种:obj.key = value; divEle.title = "tip";
第二种:obj[key] = value; divEle['title']="tip";
总结:一般用第一种比较简便,但是第二种方法更灵活,要改变的属性不固定时使用。
DOM操作元素属性的方法: getAtrribute(), setAttribute(), removeAtrribute()
6、style与className: 元素.style.属性=xxx 是修改行间样式,之后再修改className不会对该属性有效果.
style.属性写法遇到属性名中有横杆时采用驼峰写法。
7、var div1 = document.getElementById("div1"); 是从整个document里面找元素,
var inputEles = div1.getElementByTagName("input");则是从div1里面找子元素了。
8、#div1 .ccc{ 如此定义的样式表只能在ID为div1的子元素中使用。
......
}
9、JS中的this
var btns = document.getElementByTagName("button");
btns.onclick=function() {console.log(this.value);}; //this表示当前发生事件的元素(this 指向触发函数运行时的那个对象 )
// getElementByTagName()得到的是元素数组,可以给每个按钮元素添加一个自己的属性,如btns[i].index == i; 以后就可以使用这个标识
10、window.onload = function(){}; jQuery的$(document).ready(function(){}); 区别:执行时间不同,事件可绑定次数不同等等
11、遇到递增数列如1、2、3、4....,每个数字对应一个取值时,首先要使用数组实现,而不是if else或者switch。
例如:var arr = ["一月“,”二月“...]; 直接取arr[数字],而不是if(1==数字) {return ”一月"};
总结:数组是效率最高的集合,能使用数组实现的首选数组。
12、JavaScript组成:
ECMAScript(核心):定义了脚本语言的所有属性、方法和对象,称为解释器。 几乎没有兼容性问题。(不同浏览器之间)
DOM赋予了JS操作HTML的入口,即document。 有一些操作不兼容。
BOM赋予了JS操作浏览器的入口,即window。 完全不兼容,少用。
13、JS里面的变量没有类型,通过var定义变量,变量的类型取决于其里面的值的类型。typeof用于检测变量值的类型。
parseInt('a') 将报错NaN:Not a Number。 因此判断一个字符串是否数字字符串时就可以这样写:isNaN(parsetInt('a12'));
parseFloat('3.5'); 将字符串转为浮点数,小数。
14、隐式类型转换例子: var a=5; var b='5'; var c='12';
a==b; // true == 先转换值类型,然后比较值(一般用这个注意点就行了,不一定要全用全等显得那么严谨)
a===b; // false === 不转换值类型,直接比较值(简称全等)
c + b; // 125 +号在js中有两种用途: 1、字符串相加 2、数字相加
c - b; // 7 -号在JS中只有一种用途:1、数字相减,因此会想把c和b先全部转为数字,再数字相减
15、JS中由函数开辟作用域,Java中大括号开辟作用域。
JS闭包:子函数可以使用父函数的局部变量。 相当于Java中的子大括号代码可以访问父大括号中的局部变量一个道理。
本质:子作用域可以访问父作用域中的局部变量。
16、命名规范:匈牙利命名法,变量名=类型(小写)+对象描述(首字母大写),其他公司的不同命名规范几乎都是在此基础上的修改。
17、JSON 指的是 JavaScript 对象表示法,JSON 语法是 JavaScript 对象表示法语法的子集。
注意:JSON中的值可以通过jsonObj.key访问,也可以通过jsonObj['key']访问。
此外,JSON对象是没有长度的,所以无法直接通过下标jsonObj[i]的方式访问,但是用for in循环可以实现JSON对象的遍历:
for(var index in jsonObj) {
console.log(jsonObj[index]); //通过for循环才能完成JSON对象的遍历
}
Blue建议:数组循环时用for 0-len
JSON对象循环时才用for in , 这样才不容易出错,原因后面解释。
18、JS函数对象的arguments属性:函数对象的arguments属性是一个数组,保存了传入函数的所有参数。arguments也被称为可变参或不定参,
有了arguments那么JS函数的可变参数功能很方便就实现了。 在函数内部可直接使用arguments[0]、arguments[1]等访问传入参数。
19、获取行间样式:var oDiv = this.getElementById("div1");
alert(oDiv.width); // 如果元素的width属性定义在行间样式style中,可以取到,如果定义在样式表中无法取到。
原因:(外部或内部)样式表中的样式需要计算后才应用到元素,跟行间样式不同,因此取法也不同。
IE和高版本Chrome取法: oDiv.currentStyle.width Chrome和Firefox标准取法:getComputedStyle(oDiv,null).width
所以通过JS取元素样式要考虑行间样式问题和浏览器兼容性问题。此外,JS只能取元素单一样式,不能取复合样式(样式值由多个组成)。
20、数组基础:
定义: var arr=[1,2]; var arr=new Array(1,2); 没有任何差别,[]的性能略高,因为代码短,可以说JS中代码越短性能越高。
length属性: 既可以获取,又可以设置。如arr.length = 3,将清空第3个以后的元素;如arr.length = 0,将清空整个数组。
添加元素:push()\unshift() 头部\尾部添加 删除元素:pop()\shift() 尾部\头部弹出
元素任意操作:splice() 用法如下:
删除:arr.splice(起点,长度) arr.splice(2,3) 从下标2开始删除3个元素
插入:arr.splice(起点,长度,元素...) arr.splice(2,0,'a','b','c') 从下标2开始删除0个元素后插入'a','b','c'三个元素
更新:arr.splice(起点,长度,元素...) arr.splice(2,2,'a','b') 从下标2开始删除2个元素后插入'a','b'两个元素,等价于更新第3、4个元素
concat拼接:arrA.concat(arrB) 将两个数组拼接后返回
join连接:arr.join('-') 用分隔符,组合数组元素,生成字符串
sort()排序:默认按字符串排序,可传入比较函数改变排序规则。
例子:arr.sort(function(n1,n2) {return n1-n2});
21、关闭定时器: var timer = setInterval(function(){},1000); clearInteval(timer); //关闭定时器 定时器只有启动和关闭,没有暂停或重启。
炫酷数字时钟、延时提示框做法:见第9课
22、offsetleft是物体相对于文档document的左偏移,offsetleft最大的优点在于可以综合考虑所有影响物体位置的因素(比如margin,左边其他元素及其margin、空白等等)最后计算得出元素相对文档的左偏移,无需自己计算。offsetLeft只能取值,不能赋值,赋值要用left。
相应的还有offsetTop, offsetWidth/offsetHeight(获取元素盒模型的宽度和高度,包括了padding,border)
23、利用JS做动画“无缝滚动”(跑马灯) :见第10课
DOM知识:
24、DOM 是 W3C(万维网联盟)的标准。DOM 将 HTML、XML 文档表达为树结构,HTML DOM定义了访问和操作 HTML文档的标准方法。HTML DOM 定义了多种查找元素的方法,除了getElementById() 之外,还有 getElementsByName() 和 getElementsByTagName()。
25、获取子节点: oDiv.children(); //返回第一层子元素节点 oDiv.childNodes; //返回第一层子元素节点和文本节点
获取父节点: oDiv.parentNode
offsetParent: 获取最近的祖先定位元素,定位元素指的是元素的 CSS position 属性不为static(默认值)的元素,即被设置为 relative、absolute 或 fixed 的元素。
26、首尾子节点:firstChild/lastChild, firstElementChilde/lastElementChild(有兼容性问题,兼容性问题都是用if else判断解决)。
兄弟节点:previousSibling/nextSibling, previousElementSibling/nextElementSibling(同样有兼容性问题)
27、创建DOM元素:创建一个节点:document.createElement(标签名) 删除元素:父节点.removeChild(节点)
追加一个节点(追加到末尾):appendChild(节点)。 //先把元素从原有父级上删掉,再添加到新的父级;如果元素是DOM创建的,则没有删除这一步。 插入元素(在已有元素前插入):insertBefore(节点,原有节点) 。
28、文档碎片:可以提高DOM操作性能(在低级浏览器IE6,IE7中才能直接提升性能;在高级浏览器Chrome,IE9中对性能几乎无任何提升,有时还会降低。现在基本上也不用了。)
var oFrag = document.createDocumentFragement(); //文档碎片就像一个袋子,将多个JS创建的元素加入到袋子中,然后一次性将袋子插入到HTML中
29、表格操作:在90年代,没人提DIV+CSS布局,大家都在用table布局,所有JS开发者为table操作提供了一些便捷的API。如:
表格获取:tBodies(获取table的所有bodies),tHead(获取表头,只有一个),tFoot(获取表尾,只有一个),rows,cells
代码:oTable.tBodies[0].rows[0].cells[0]; //获取表格oTable的第一个body的第一行的第一列
oTable.tBodies[0].rows[0].style.background="#CCC"; //改变行的背景色、还可以给行加鼠标移入高亮、筛选等等
表格插入行:DOM创建行,然后插入到表格尾部 表格删除行:相似操作
30、oDiv.appendChild(oLi) 方法
31、DOM获取的元素数组与JS中数组Array不一样,DOM获取的元素数组只有length,[index]操作,没有Array的sort,splice,join,push,pop等操作。
DOM获取的元素数组排序解决办法:用for循环将元素数组塞到JS数组里面,然后再调用sort(排序规则函数)函数。
32、什么是表单:向服务器提交数据,action属性指明提交到哪里。
表单事件:onsubmit:提交时发生(最有用), onreset:重置时发生
表单控件的name属性和value属性,在表单提交时作为键值对传给后台。
有了Ajax不需要表单也可以向服务器提交请求或发送数据。
(重点)Blue石川:无论是ajax还是jsonp等数据交互方式,它们的本质都是对表单的模拟。实际上,http规定了表单是浏览器对服务器请求数据的唯一方式,因此虽然我们可能很少用到表单,却万万不能忽视表单的重要性。
33、表单内容验证:onsubmit和事件的阻止默认事件配合起来做表单验证。
不管JS检查的再怎么巧妙,再怎么靠谱,再怎么考虑周全,还是不行。用户可以禁用JS(禁用后JS校验不会执行,form表单点击submit直接提交数据),
或者写伪装页面来提交数据(写伪页面模仿真实页面表单提交请求),都是有可能。
所以不管前台再怎么校验,后台也还必须的做检查,这个是没办法的事,毕竟一切来自用户的数据都是不可信的。
Blue平常经常说的一句话:掌握多少个函数,掌握多少个库,这个基本上没什么用。最重要的是你的思想如何,你的思想到哪儿了,你啥都不会,有一天就学会了,就这么简单。
JS运动知识
34、运动的物体基本上要绝对定位:position:absolute
位置运动基本是:访问offsetLeft,offsetTop属性和操作left,top属性。 //像素的最小单位是1px,如果给left,top赋予小数,则计算机往下取整
35、框架:说的很简单,就是前人在做一件事的时候总结出来了这么一套规律,以后你做相同的事只要按照这个步骤走这事就靠谱了。
框架的作用一是帮助你,二是约束你。
JS运动的基本框架(即写运动的基本写法):见第15课 ; 多物体运动框架:见第17课; 完美运动框架:见第19课 ;
总结:写程序写到高级的地方会发现最后都是数字的游戏了。
36、多个DIV同时动时,需要多个定时器,可以在JS中定义多个定时器,更好的方法是给每个DIV对象加个属性来存储自己的定时器。
代码:var oDiv = document.get..ById("div1"); oDiv.timer = function(... setInterval(); ...);
37、console.log(0.007*100); //0.7000000000000001 输出结果是float类型,但是不准确,是因为float是用近似值来表示?
38、链式运动:一个运动结束后执行另一个运动。
做法:给第一个运动函数传入参数(第二个运动函数),第一个运动函数执行完时调用第二个运动函数。
39、offsetHeight,offsetWidth(获取元素盒模型的高度和宽度)是计算过后的高度和宽度,这两个属性在插入元素后立马就能取元素高度和宽度,
方便做运动效果。(比如留言板插入,想让新的留言不是突然一下插到首条留言,而是慢慢的从上往下展开下来,就可以插入新留言li
后获取li高度,然后设置为0,让其高度从0展开到获取的高度,同时还可以让透明度运动)
JS事件基础、中级、高级:
40、event对象:丰富我们获取事件的信息。
获取event对象(兼容性写法):var oEvent = ev||event; (JS第二定律:凡是好用的东西必定不兼容,如event,)
获取页面的scrollTop(兼容性写法):var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
小经验:但凡用到clientX,clientY的时候,一定要加上scrollLeft,scrollTop,否则很容易就出问题。
41、document代表整个页面, document.childNodes[1].tagName; //HTML [0]:DOCTYPE
实际上document是第一级标签<!DOCTYPE html> 和 <html>的父级。
所以要给整个页面加事件一定要给document加,而不是body,因为body要被撑开且占满屏幕高度才能保证触发事件。
42、事件冒泡:平时很少主动用这个,更多的是给咱们带来了麻烦。 取消冒泡:event.cancelBubble = true; //让事件不再往父级传
(例如子元素、父元素各有点击事件,但是不能同时执行,这时就不能让子元素的点击事件冒泡给父元素触发父元素的点击事件)
事件捕获与事件冒泡:当事件发生时,事件对象先从上(document)往下传,再从下往上传走一个圈。每个元素对象都可以添加
不同事件的捕获函数和冒泡函数:oElement.addEventListener('click',function(){},false/true) 默认值false表示事件冒泡函数
onclick、onmousedown...设置的是冒泡函数。
43、按键控制方向:按下不松第一下有卡顿。为什么? 第20课40分钟。
44、键盘事件的主要属性:keyCode、ctrlKey、shiftKey、altKey
oInput.onkeydown=function(){ //给元素添加键盘按下事件(元素获取焦点的状态下才会触发)
var oEvent = ev||event;
if(oEvent.keyCode==13){}; //按Enter触发
if(oEvent.keyCode==13 && oEvent.ctrlKey){}; //按CTRL + Enter触发,定义快捷键
};
45、事件默认行为:浏览器自带的事件行为。 阻止默认行为:return false 或者 event.preventDefault()
例1:自定义右键菜单(阻止右键默认行为)
document.oncontextmenu=function(ev){ //oncontextmenu,点击右键事件
var oEvent = ev||event;
oDiv.style.display = block; //显示自定义菜单
return false; // 屏蔽系统右键菜单
};
例2:表单控件只能输入数字(阻止按键默认行为)
var oInput = document.getElementById("txt1");
oInput.onkeydown = function(ev) {
var oEvent = ev||event;
if(oEvent.keyCode < 48 || oEvent.keyCode>57 && oEvent.keyCode!=8 ) // 8:backspace删除键 48-57:数字键
return false;
}
例3:鼠标拖拽物体移动: 见第21课。
oDiv.onmousedown = function() {
...获取div和鼠标的坐标差...
document.onmousemove = function() {
//让div跟着鼠标移动
}
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
}
return false; //避免了firefox中的拖拽bug和不同浏览器下的某些问题
}
JS事件高级应用:
46、事件绑定:实现一个事件上绑很多函数。 应用:鼠标拖拽与吸盘,第22课
绑定:addEventListener(事件名称,函数,捕获或冒泡); 解绑:removeEventListener(事件名称,函数,捕获或冒泡)
IE:attachEvent(事件名,函数),detachEvent(事件名,函数)
此外,IE和Chrome+Firefox在事件名称上还有区别,IE事件名要带on,如onclick,onmouseover; Chrome和Firefox不需要带on
IE的oDiv.setCapture():把所有事件集中到oDiv上来处理。
47、自定义滚动条:第23课( 基础是鼠标拖拽,第22课 )
思路:自定义滚动条及其滚动条框是固定高度的,拖动滚动条时计算出滚动距离的比例。要滚动的div3的父div2的overflow:hidden。
通过控制div3的top值实现其滚动效果,top值通过比例以及div2和div3的高度计算。
Ajax基础和中级:
48、Ajax功能:在不刷新页面的前提下去请求服务器数据。 服务器跟PC没啥区别。 WAMP服务器程序。
Ajax请求过程:创建Ajax对象--》连接到服务器,open()--》发送请求,send()--》接收返回数据
49、缓存:根据URL来缓存的,即缓存访问过的URL的内容。 开发阶段解决缓存干扰办法:让URL一直变,如在URL后面加个没用的Get参数
get方式:有缓存。 post方式:无缓存。
50、XMLHttpRequest对象
readyState属性:浏览器和服务器的交互,进行到哪一步了 //3(解析):正在解析响应内容 4(完成):响应内容解析完成,可以在客户端调用了。
注意:读取HTTP响应完成并不代表请求成功。
status属性:HTTP响应状态码。 // 200:请求成功
51、XML可以说已经被历史淘汰了,基本是老式的程序在用。因为同等数据量下,XML比JSON大得多,浪费带宽。
字符集全都统一为utf-8就没编码问题了。
JS面向对象基础,中级,高级:
52、第26课开始, 待继续。。。。。。
其他:
1、setTimeout(func, delay, param1, param2, ...) 第三个参数及以后的参数都可以作为func函数的参数
2、[10, 20, 1, 2].sort(); //无法理解的结果: [1, 10, 2, 20]
这是因为Array的sort()方法默认把所有元素先转换为String再排序,默认对字符串排序是按照ASCII的大小比较的。
sort()方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序:通常规定,对于两个元素x和y,如果认为x > y(x < y),则返回1(-1),
如果认为x == y,则返回0,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。如果要倒序排序,颠倒比较函数的返回值就行了。
3、Array的高阶函数map(0/reduce(),filter()都接收一个运算函数,遍历数组元素的进行相应运算。
4、闭包:我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。 闭包的作用域是静态的,可以永久保存局部资源,而函数作用域只存在于运行时,函数执行结束后立即销毁。
如果内部函数sum使用了外部函数lazy_sum的相关参数和变量,则返回的sum使用的是最终的参数值和变量值。例如:
function count(j) { var i = 1; var arr = []; arr.push(function(){return i*i;}); i=2; arr.push(function(){return i*i;}); j++; arr.push(function(){return j*j;}); return arr;};
var res = count(3); res[0](); //4 res[1](); //4 res[2](); //16 // 返回的函数使用的参数j和变量i都是最终的参数值和变量值。
5、generator(生成器):和函数不同的是,generator由function定义(注意多出的号),并且,除了return语句,还可以用yield返回多次。yield要在return之前返回。
大多数同学立刻就晕了,generator就是能够返回多次的“函数”?返回多次有啥用?(见廖雪峰官网)
6、JS的原型和原型链: (最好的解释参见:https://www.jianshu.com/p/dee...)
JS是一种基于对象的语言,但在ES6之前是不支持继承的,为了具备继承的能力,Javascript在函数对象上建立了原型对象prototype,并以函数对象为主线,从上至下,在JS内部构建了一条 原型链 。原型链把一个个独立的对象联系在一起,Object则是所有对象的祖宗, 任何对象所建立的原型链最终都指向了Object,并以 Object 终结。
记住以下两点:
1.__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性。
PS:数据类型String,Array,Number,Boolean,Object都是函数。 // typeof(Array) typeof(number)... 都是function; Math是个例外,是对象,不是函数。
2. __proto__指向的是当前对象的原型对象,而prototype指向的,是以当前函数作为构造函数构造出来的对象的原型对象。
3.原型和原型链是JS实现继承的一种模型。原型链的形成正是靠__proto__,而非prototype.
(个人总结):每个函数(Person)对应一个原型对象,原型对象(Person.prototype)是构造函数(Person)的一个实例,原型对象有一个默认属性constructor,每个对象都是依据原型对象创建的。创建的对象从原型对象上继承属性(另外通过构造函数中初始化自己的属性),同时也继承了原型链上的属性。
可以给原型对象添加属性,从而让创建的对象继承了这些属性。
那原型对象是用来做什么的呢?主要作用是用于继承。
所有函数对象的proto都指向Function.prototype,且所有函数对象的构造函数都是Function,因为所有函数对象都是依据Function函数的原型对象创建的。
7、JavaScript中的this到底是什么? (参考:http://mp.weixin.qq.com/s/ksq...)
函数调用的最终形式:func.call(context, p1, p2) // 暂不谈func.apply(this, [arg1, arg2])
this,就是上面代码中的 context。就这么简单。
this 是你 call 一个函数时传的 context,由于你从来不用 call 形式的函数调用,所以你一直不知道。
如何确定this?
this 均指向触发函数运行时的那个对象。而在函数运行时,this 的值是不能被改变的。
如果你传的context 是 null 或者 undefined,那么 window 对象就是默认的 context(严格模式下默认 context 是 undefined)。
8、JavaScript函数对象的call,apply,bind方法:Function对象提供了call、apply
和 bind 等方法来改变函数体内的 this 指向,其中,call 和 apply 主动执行函数,bind一般在事件回调中使用,而 call 和 apply
的区别只是参数的传递方式不同。
call,appply用途:某个对象借用别的对象的方法来处理自身的数据。 例如:A对象有say方法,B对象没有。 A.say.call(B); //B对象调用A对象say方法
9、JavaScript delete操作符: delete 操作符用于删除对象的某个属性, delete object.property 或 delete object['property']。
delete操作符具有返回值,返回值为布尔值,删除不存在的属性会返回true。
使用var声明的属性(包括函数),不能从全局作用域或函数作用域中删除。
任何用let或const声明的属性不能够从它被声明的作用域中删除。
10、访问js对象的成员的两种方式:方式一:点语法 方式二:通过使用object[propertyName] (对象[属性名])
一般情况下,使用最多的是第一种方式,即:点语法。但是,当你使用动态属性名称并且当属性名必须包含js不支持的字符时,就不能使用点了,此时方式二变得非常有用。
11、null,undefined 的区别?
null 表示一个对象被定义了,值为“空值”;
undefined 表示不存在这个值。
怎么判断一个变量没有被定义:typeof bianliang ==”undefined”
12、怎么判断一个变量arr的话是否为数组(此题用typeof不行):Arr instanceof Array 或者 Array.isArray()
13、事件委托是什么
事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。
事件委托还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。
14、Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math()。您无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。
Date,String都是函数,需要new对象后才能调用方法。
15、.写一个通用的去除字符串左右空格的函数?
String.prototype.strim = function(){
return this.replace(/(^\s|\s$)/g,””);
}
16、javascript检测浏览器是否支持某些事件
功能检测 “touchstart” in document //使用 in 运算符,检测对象中是否存在事件
特征检测 navigator.userAgent //检测浏览器内核、版本等信息
17、var aa = new Function() 它的本意其实是通过实例化一个Function原型,得到一个数据类型为function的对象,也就是一个函数,而该变量就是函数名。
等价于: function aa() { ...... }
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。