2.js深入(以通俗易懂的语言解释JavaScript)
1.函数返回值:
即函数的执行结果
可以没有return
经验:一个函数应该只返回一种类型的值
2.函数传参
可变参(不定参):arguments ——>(参数的个数可变,参数数组)
例子1:求和
1 function sum() { 2 //alert(arguments.length); 3 //alert(arguments[0]); 4 //类似面试题数组求和 5 6 var result=0; 7 8 for(var i=0;i<arguments.length;i++){ 9 result+=arguments[i]; 10 } 11 12 return result; 13 } 14 15 alert(sum(8, 8, 8, 8, 8, 8));
例子2:CSS函数
1 function css(obj, name, value){ 2 if(arguments.length==2) //获取{ 3 return obj.style[name]; 4 } 5 else{ 6 obj.style[name]=value; 7 } 8 } 9 10 window.onload=function (){ //先渲染页面,再执行此函数 11 var oDiv=document.getElementById('div1'); 12 13 //alert(css(oDiv, 'width')); 14 15 css(oDiv, 'background', 'green'); 16 }; 17 18 //<div id="div1" style="width:200px; height:200px; background:red;">
3.取非行间样式(不能用来设置)
第二个兼容(第一个兼容问题待补充)
1 //#div1 {width:200px; height:200px; background:red;} 2 3 var oDiv=document.getElementById('div1'); 4 5 6 if(oDiv.currentStyle){ 7 //IE 8 alert(oDiv.currentStyle.width); 9 } 10 else{ 11 //FF 12 alert(getComputedStyle(oDiv, false).width); 13 }
将以上函数封装,以后可通过引入的方式直接使用
1 function getStyle(obj, name){ 2 if(obj.currentStyle){ 3 //IE 4 return obj.currentStyle[name]; 5 } 6 else{ 7 //Chrome、FF 8 return getComputedStyle(obj, false)[name]; 9 } 10 } 11 12 window.onload=function (){ 13 var oDiv=document.getElementById('div1'); 14 15 alert(getStyle(oDiv, 'width')); 16 //alert(getStyle(oDiv, 'background')); //取不到,应该用下面的写法 17 //alert(getStyle(oDiv, 'backgroundColor')); 18 };
js第二定律:但凡是好东西,一定不兼容(所以第一定律是???)
经验:js中 99.99...%的兼容问题都是通过 if 来解决的
上述代码background取不到背景色是因为background是一个复合样式,包括背景色、背景图片、背景位置......
复合样式:background、border
单一样式:width、height、position
4.数组基础
定义:var arr = [1,2,3,4];
var arr = new Array(1,2,3,4);
这两种方式无任何差别,[ ]的性能略高,因为代码短。
数组的属性:length
既可获取,又可设置,例如设置 arr.ength=0;可快速清空数组
原则:数组中应该只存一种类型的变量
添加、删除元素
添加:push(元素),从尾部添加;unshift(元素),从头部添加
删除:pop(),从尾部弹出;shift(),从头部弹出
数组的万能操作:splice
1 var arr=[1,2,3,4,5,6]; 2 3 //删除:splice(起点, 长度) 4 //arr.splice(2, 3); //1,2,6 5 6 //插入:splice(起点, 长度, 元素...); 7 //arr.splice(2, 0, 'a', 'b', 'c'); //1,2,a,b,c,3,4,5,6 8 9 //替换 10 arr.splice(2, 2, 'a', 'b'); //1,2,a,b,5,6 11 12 alert(arr);
数组连接:concat、join
1 var a=[1,2,3]; 2 var b=[4,5,6]; 3 4 //alert(a.concat(b)); 5 alert(b.concat(a));
1 var arr=[1,2,3,4]; 2 3 alert(arr.join('- ')); //1-2-3-4 连接成字符串
数组排序:sort
排列一个字符串数组
1 var arr=['float', 'width', 'alpha', 'zoom', 'left']; 2 3 arr.sort(); //a->Z
排列一个数字数组,如果直接用sort方法,则sort()会把数字当作字符串来处理,可通过比较函数来解决数字数组排序问题(面试题)
1 var arr=[12, 8, 99, 19, 112]; 2 3 arr.sort(function (n1, n2){ 4 if(n1<n2){ 5 return -1; 6 } 7 else if(n1>n2){ 8 return 1; 9 } 10 else{ 11 return 0; 12 } 13 }); 14 15 alert(arr);
偷懒的好方法
1 var arr=[12, 8, 99, 19, 112]; 2 3 arr.sort(function (n1, n2){ 4 return n1-n2; 5 };
(ps:本内容整理于blue视频教程及个人学习过程中总结,持续更新中)