js中的运算符、调试、函数和数组

一、运算符
 1 <script type="text/javascript">
 2         var r='a'||'';
 3         alert(r);//a
 4         //前者非空,返回true,后者为空,返回false,|| 表示或者,只要有一个为真,就返回真,
 5         // 所以整个表达式返回true。
 6         // ||表达式中,只要第一个为真,第二个值不用判断了,直接返回true。
 7         // 因为第一个变量的值是true,所以返回第一个变量值。
 8 
 9         var r=null||15;
10         alert(r);//15
11 
12         var r='a'&&0;
13         alert(r);//0
14 
15         var r=null&&15;
16         alert(r);//null
17 
18         var r='12312'||12;
19         alert(r);//12312
20 
21         var r='12312'&&12;
22         alert(r);//12; 前后两个表达式都是true,&&表示并且,所以整个表达式是true,
23         // 但是返回的是最后一个为真的表达式的值
24 
25     </script>
View Code


二、脚本的调试

1.ie调试

2.firefox调试

先安装firebug。

3.Google调试

4.vs调试

把页面设置成起始页,打断点,F5调试。

注意:如果打了断点,刷新后怎么都不不能调试,可能是浏览器安装了某些插件,影响了调试工具的使用。可以先卸载,重启浏览器,再调试。或者直接把浏览器还原到初始状态。

 

三、函数

1.函数没有访问修饰符,没有返回值(js是一门动态语言,数据类型根据变量的值来定,所以在不需要设置方法的返回值)

2.不要使用js内置的关键字或者系统函数名作为函数名

3.没有方法重载一说,所以f()不管有没有参数,只要是方法名称相同,就是同一个方法,后面的方法会覆盖前面的方法。

4.js中的方法的参数仅仅是为了使用方便,就算不写,也可以在调用的时候传递。这些参数全部保存到了arguments中。

 

 1   <script type="text/javascript">
 2        function f() {
 3            alert('first method')
 4        }
 5 
 6        function f(name) {
 7            alert(name);
 8        }
 9 
10        //f();//undefined。原因:js中没有方法重载一说,所以f()不管有没有参数,只要是方法名称相同,就是同一个方法,后面的方法会覆盖前面的方法。
11        // 所以f()调用的是f(name).由于没有传入参数,声明一个变量,不赋值,该变量的值就是undefined,类型也是undefined。
12 
13        //js中的方法的参数仅仅是为了使用方便,就算不写,也可以在调用的时候传递。这些参数全部保存到了arguments中。
14 
15        function f1() {
16            var sum=0;
17            for (var i=0;i<arguments.length;i++) {
18                sum+=arguments[i];
19            }
20            return sum;
21        }
22        alert(f1(1,2,3,4,5,6));
23     </script>
View Code

 5.案例

 1 <script type="text/javascript">
 2         var userName = "tom";
 3 
 4         function f() {
 5             alert(userName);//undefined
 6             var userName = 'zhong';
 7             alert(userName);//zhong
 8         }
 9         alert(f());
10         alert(userName);//tom
11         //在函数的内部声明变量,整个函数都能访问。因为js中没有块级作用域的概念。
12         // 如果局部变量和全局变量重名,优先使用靠的最近的变量。
13         // 变量和函数会被预解析,后面的成员会覆盖前面的成员,但是预解析不会执行赋值语句。所以在执行f()中的alert(userName)时,userName已经声明,只是没有赋值,所以弹出undefined。
14     </script>
View Code

总结:因为js具有预解析的功能,所以最好在开始一次性把变量全部声明完。

 

练习 (结果:4……4。因为同一个script中的js代码会先预解析,后面的方法或者变量会覆盖前面的方法或者变量,但是要注意变量只是覆盖变量名,不会覆盖赋值语句)

 1 var x=1,y=0,z=0;
 2         function add(n) {
 3             n=n+1;
 4             return n;
 5         }
 6         y=add(x);
 7         function add(n) {
 8             n=n+3;
 9             return n;
10         }
11         z=add(x);
12         alert(y+'……'+z);
View Code

 

 6.函数本身可以做一个函数来调用,还可以看做是一个对象(函数对象),有特有的成员和方法。

1 function myFunction(x) {
2             alert("i");
3         }
4         //alert(myFunction.toString());//弹出整个方法,包括方法体
5         //alert(myFunction.length);//弹出形参的个数
View Code

7.匿名方法

1)声明。

1  //匿名函数
2         var f1=function () {
3             alert('这是匿名函数');
4         };
5         //f1();
View Code

2)三种使用方法

1>直接赋值给变量调用

如上面声明时候的代码。也可以看下面。

 1  var f=function (fn) {
 2             alert('这是一个fn函数');
 3             fn();
 4         }
 5 
 6         f(f12)//调用匿名函数f(),传入参数f12,由于f12是个方法,所以可以直接这样调用:fn()
 7         //还可以不用传递变量,直接传递一个匿名函数
 8         f(function () {
 9             alert('这是直接传递匿名函数');
10         })
11 
12         function f12() {
13             alert('12');
14         }
View Code

2>括上匿名方法,后面加上括号直接调用。后面的括号中可以写参数。

1 (function() {  alert('这是匿名方法的第二种调用方式')   })();
2         (function (x,y) {
3             return alert(x+y);
4         })(2,3);
View Code


3>new Funtion()方式

1 //var f=new Function('x','y','z','alert(x+y+z)');
2         var f=new Function('x,y,z','alert(x+y+z)');//通过匿名方法声明的变量,只能在方法内部访问,外界不能访问。eval()中的变量是全局变量
3         f(1,2,3);
View Code

练习:结果2…… 4. 变量预解析只解析变量名称,不解析赋值语句。

 1 var x=1,y=0,z=0;
 2         var add=function (n) {
 3             n=n+1;
 4             return n;
 5         }
 6         y=add(x);
 7         add=function (n) {
 8             n=n+3;
 9             return n;
10         }
11         z=add(x);
12         alert(y+'……'+z);
View Code

 8.数组

1)声明:var data=[]; var data=[2,4,5,1];   var data=new Array(5);//可以不填长度

2) 赋值技巧

 1 //一、声明一个数组
 2         // var arr=[2,34,1,5,6,3];
 3         // for(var i=0;i<arr.length;i++){
 4         //     alert(arr[i]);
 5         // }
 6         // alert(arr.length);
 7         // alert(arr.toString());//2,34,1,5,6,3
 8 
 9         //二、声明一个空数组
10         var data =[];
11         // data[100]=1;//数组的长度立刻变成101,0-100的元素都是undefined。
12         // alert(data.length);
13         // alert(data.toString());
14 
15         // data[data.length]=1;
16         // data[data.length]=2;
17         // data[data.length]=3;
18         // alert(data.toString());
 1 <script type="text/javascript">
 2         //一、声明一个数组
 3         // var arr=[2,34,1,5,6,3];
 4         // for(var i=0;i<arr.length;i++){
 5         //     alert(arr[i]);
 6         // }
 7         // alert(arr.length);
 8         // alert(arr.toString());//2,34,1,5,6,3
 9 
10         //二、声明一个空数组
11         var data =[];
12         // data[100]=1;//数组的长度立刻变成101,0-100的元素都是undefined。单独循环的话,弹出的是undefined,调用tostring()方法,弹出的是空
13         // alert(data.length);
14         // alert(data.toString());
15 
16         // data[data.length]=1;
17         // data[data.length]=2;
18         // data[data.length]=3;
19         // alert(data.toString());
20 
21         // for(var i=1;i<=50;i++){
22         //     if(i%2==0){
23         //         data[data.length]=i;
24         //     }
25         // }
26         // alert(data.toString());
27 
28         //三、数组长度可以动态设置
29         data[4]='A';
30         data[10]='B';
31         data[20]=true;//此时数组的长度变成21
32 
33         //可以动态设置数组的长度
34         data.length=3;
35         for (var i=0;i<21;i++){
36             alert(data[i]);//只输出前三个元素,后面的的18的元素的值都是undefined。
37         }
38     </script>
View Code

 

 

posted @ 2018-11-27 20:20  wesley1680  阅读(236)  评论(0)    收藏  举报