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="200px; height:200px; background:red;">

 3.取非行间样式(不能用来设置)

  第二个兼容(第一个兼容问题待补充)

 1 //#div1 {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视频教程及个人学习过程中总结,持续更新中)

原文地址:https://www.cnblogs.com/spynode/p/9852737.html