万金流
初次使用博客园,目前感觉还不错。 不知不觉用了4年零4个月了,越来越喜欢博客园。
《Web前端开发实践》承P85
eval(单词Evaluate的简写)求值。
例:
用循环依次执行三个函数
 1 function f1()
 2 {
 3     console.log("hi1");
 4 }
 5 function f2()
 6 {
 7     console.log("hi2");
 8 }
 9 function f3()
10 {
11     console.log("hi3");
12 }
13 for(i=1;i<=3;i++)
14 {
15     eval("f"+i+"()");
16 }

结果略。

js支持给参数设置默认值。

例:

function f1(x,y=50)
{
    console.log(x+y);
}
f1(10,20);
f1(10);

结果分别是30和60。

注意,有默认值的参数只能是参数表最后的几个参数。

js支持不确定个数参数。通过在参数前面加“...”,表示该参数可以接受多个值。

例,求一组数字的和:

function f1(...x)
{
    s=0;
    for(i=0;i<x.length;i++)
    {
        s+=x[i];
    }
    return s;
}
alert(f1(1,2,3,4,5));

弹出15。

js支持用arguments数组获得实际参数。这时候函数可以不带参数。

还是求一组数字的和:

function f1()
{
    s=0;
    for(i=0;i<arguments.length;i++)
    {
        s+=arguments[i];
    }
    return s;
}
alert(f1(1,2,3,4,5));

结果还是弹出15。

再提一下匿名函数的自调用。

对于只出现一次的函数(通常就是随手写个功能,用完就算了,起名字太麻烦;或者用于事件绑定等特殊情况),可以写成匿名函数。

如已知半径,随手输出一个球的体积:

(function (x)
{
    console.log(4/3*3.14*x*x*x);
})(2);

结果略。

如点击页面,弹出窗口:

function f1()
{
    document.body.onclick=function ()
    {
        alert("hi");
    }
}

结果略。

js中,函数可以作为其他函数的参数出现。作为参数的函数,叫“回调函数”。

//用逗号做分隔符打印数组x
function f1(x)
{
    t="";
    for(i=0;i<x.length-1;i++)
    {
        t+=x[i]+",";
    }
    t+=x[x.length-1];
    console.log(t);
}
//用减号做分隔符打印数组x
function f2(x)
{
    t="";
    for(i=0;i<x.length-1;i++)
    {
        t+=x[i]+"-";
    }
    t+=x[x.length-1];
    console.log(t);
}
//用指定方法x打印数组
function f3(x)
{
    let a=[1,3,5,2,4,6];
    x(a);
}
f3(f1);
f3(f2);

运行结果:

匿名函数还有一种简写方式,叫做拉姆达(lambda)表达式 ,在代码中也经常出现。这种写法在主流编程语言里也都有。建议大家自己查资料补一下。

值类型和引用类型。对于数组这样的引用类型,和普通这样的值类型,在函数处理的时候,需要了解一下原理。

例:

function f1(x,y)
{
    t=x;
    x=y;
    y=t;
}
function f2(x,y)
{
    t=x[0];
    x[0]=y[0];
    y[0]=t;
}
a=1;
b=2;
c=[3];
d=[4];
f1(a,b);
f2(c,d);
console.log(a);
console.log(b);
console.log(c[0]);
console.log(d[0]);

运行结果:

 练习:

编写四个函数,分别求两个数的和差积商,并运用。

输入一个数n,返回1+2+3+...+n。

输入两个数m,n(m<n),返回m*(m+1)*...*n。

用数组做方法的参数和返回值。把一组整数反转,输出。

输入数组x和标准y,统计出x中大于y的数所占比例。

编写两个方法,分别输入和输出一维整形数组[形如read_array(5)和write_array(x)]。

 

关于对象:

简单的js对象与其他主流编程语言中的类对象概念相似。表现出来是键值对。

可以很方便的生成和遍历。常用操作如下:

 1 //普通对象
 2 //直接书写对象
 3 let a1={xm:'zs',nl:20};
 4 //利用object生成对象,类似于用array生成数组。
 5 let a2=Object();
 6 a2.xm='ls';
 7 a2['nl']=18;
 8 
 9 //获取对象所有属性
10 let c=Object.keys(a1);
11 //获取对象所有值
12 let d=Object.values(a2);
13 //显示属性和值1
14 for(i=0;i<c.length;i++)
15 {
16     console.log(c[i]);
17 }
18 for(i=0;i<d.length;i++)
19 {
20     console.log(d[i]);
21 }
22 //显示属性和值2
23 //使用for...in遍历对象属性,再利用属性输出值
24 for(i in a1)
25 {
26     console.log(i+'---'+a1[i]);
27 }

运行结果:

代码中第6行和第7行是根据属性取对象值的两种方式,推荐第7行的写法。

另:js的对象也可以包含方法。但受弱类型的限制,这么设计很麻烦,通常也就不用。

例:

1 a = {
2     xm: "zs",
3     nl: 20,
4     showMe:function () {
5         console.log("I'm " +this.xm + "," +this.nl + " years old.");
6     }
7 }
8 a.showMe();

上面的代码是可以工作的。

 关于json

json的全称是“javascript对象表示法”。是当下web端与服务器端通讯最常用的一种格式(其实是事实标准)

在js当中,对象和表示这个对象的json字符串,内容极其相似(多数情况下完全相同)。

它们的区别,更多是概念上(也就是字面上),以及由此引起的操作。即:js对象是一个具体的js程序元素,json字符串就是一个字符串。

通常使用“JSON.stringify()”把js对象转化为json串(ify后缀,使...化。stringify即字符串化),在互联网上传播;使用“JSON.parse()”把json字符串转换回对象,在js程序中使用。

例:

 1 let a1={xm:'zs',nl:20},a2={xm:'ls',nl:18},a3={xm:'ww',nl:19};
 2 let b=[a1,a2,a3];
 3 c1=JSON.stringify(a1);
 4 c2=JSON.stringify(b);
 5 d1=JSON.parse(c1);
 6 d2=JSON.parse(c2);
 7 console.log(a1);
 8 console.log(b);
 9 console.log(c1);
10 console.log(c2);
11 console.log(d1);
12 console.log(d2);

运行结果:

 注:设计json的目的是为了传递数据。如果对象里带有方法,方法并不参与序列化。


 
posted on 2023-05-24 00:47  万金流  阅读(209)  评论(0编辑  收藏  举报