草庐IT

day05-JavaScript02

liyuelian 2023-04-16 原文

JavaScript02

8.JavaScript函数

  • JavaScript函数介绍

    函数是由事件驱动的,或者当它被调用时,执行的可重复使用的代码

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数快速入门</title>
    <script type="text/javascript">
        //定义一个简单的函数
        //如果不调用函数,该函数不会执行
        //在js中如果要执行函数,有两种方式:1.主动调用 2.通过一个事件去触发该函数
        function hi() {
            alert("hi~~~");
        }
        //hi();主动调用
    </script>
</head>
<body>
<!--
        这里表示给按钮button绑定了一个onclick事件,
        当用户点击了该button,就会触发hi()函数
-->
<button onclick="hi()">点击这里</button>
</body>
</html>

8.1JS函数的定义方式

方式一:function关键字来定义函数

基本语法:

function 函数名(形参列表){
	函数体
	return 表达式
}
//调用 函数名(实参列表);

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数使用方式1</title>
    <script type="text/javascript">
        //1.定义没有返回值的函数
        function f1() {
            alert("f1被调用")
        }
        f1();//f1被调用

        //2.定义有形参的函数
        //这里的形参不需要指定类型,name的数据类型是由实参决定的
        function f2(name) {
            alert("hi" + name);
        }
        f2("你好吗?");//hi你好吗?
        f2(800);//hi800

        //3.定义有形参和返回值的函数,不需要指定返回的类型,返回类型由返回的数据来决定
        function f3(n1, n2) {
            return n1 + n2;
        }
        alert("f3(\"hi\",200)="+f3("hi",200));//f3("hi",200)=hi200

    </script>
</head>
<body>

</body>
</html>

方式二:将函数赋给变量

基本语法:

var 函数名=fuction(形参列表){
    函数体
    return 表达式
}
//调用 函数名(实参列表);

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用函数的第二种方式</title>
    <script type="text/javascript">
        //可以理解成f1指向了函数
        var f1 = function () {
            alert("老师你好");
        }

        console.log(typeof f1);//f1的数据类型是 function
        f1();//调用函数-老师你好

        var f3 = f1;//将f1指向的函数赋给其他变量
        f3();//老师你好

        var f2 = function (name) {
            alert("hi" + name);
        }
        f2("小红帽");//hi小红帽

        var f4 = function (n1, n2) {
            return n1 + n2;
        }
        alert(f4(100, 50));//150
    </script>
</head>
<body>

</body>
</html>

8.2JS函数注意事项和细节

  1. JS中函数的重载会覆盖掉上一次的定义
  2. 函数的arguments隐形参数(作用域在fuction函数内),隐形参数是一个对象数组
    • 隐形参数:在function函数中不需要定义,可以直接用来获取所有参数的变量
    • 隐形参数特别像java的可变参数一样 public void fun(int ...args),操作类似数组
    • 如果函数有形参,在传入实参的时候,仍然按照顺序匹配,如果实参个数大于形参个数,就将匹配上的数赋给形参,忽略没有匹配上的实参。但是仍然会把所有的实参都赋给arguments
    • 如果形参个数大于实参个数,没有匹配的形参的值就是undefined

例子1:JS中函数的重载会覆盖掉上一次的定义

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数使用的注意事项</title>
    <script type="text/javascript">
        //1.1js中函数的重载会覆盖掉上一次的定义
        function f1() {
            alert("ok f1")
        }

        function f1(name) {
            alert("hi " + name);
        }

        //1.2当调用方法f1()的时候,实际上调用的是f1(name)方法
        //调用f1(name)时,如果没有传入实参,那么这个形参name就是undefined
        f1();//hi undefined
    </script>
</head>
<body>

</body>
</html>

例子2:隐形参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数使用的注意事项</title>
    <script type="text/javascript">
        function f2() {//隐形参数是一个对象数组
            //遍历函数的arguments隐形参数
            //arguments是一个数组
            //注意:如果希望通过console.log输出对象的数据,使用逗号,来连接,而不是加号+
            console.log("arguments=", arguments);//arguments=Arguments { 0: 10, 1: 20, 2: "50", 3: "nihao", … }
            console.log("arguments长度=", arguments.length);//arguments长度= 4
        }

        f2(10, 20, "50", "nihao");

        //如果函数有形参,在传入实参的时候,仍然按照顺序匹配
        //如果实参个数>形参个数,就就将匹配上的数赋给形参,忽略没有匹配上的实参
        //但是仍然会把所有的实参都赋给arguments
        function f3(n) {
            console.log("n=", n)//n= 100
            console.log("arguments=", arguments)//arguments=Arguments { 0: 100, 1: 300, 2: 788, … }
        }

        f3(100, 300, 788);

        //如果形参个数大于实参个数,没有匹配的形参的值就是undefined
        function f4(a, b, c, d) {
            console.log("d=", d);//d= undefined
        }

        f4(100, 200, 300);

    </script>
</head>
<body>

</body>
</html>
  • 练习
  1. 要求:编写一个函数,用于计算所有参数相加的和并返回,如过实参不是number就过滤掉
  2. 提示使用typeof来判断参数类型
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        //编写一个函数,用于计算所有参数相加的和并返回,如过实参不是number就过滤掉
        function sum() {
            var res = 0;
            for (i = 0; i < arguments.length; i++) {
                if (typeof arguments[i] == "number") {//注意arguments数组放的是对象
                    res += arguments[i];
                }
            }
            alert("参数相加的和=" + res);
        }

        sum(100, "nihao", 500, null, 200, undefined);
    </script>
</head>
<body>

</body>
</html>

9.JS自定义对象

  • 自定义对象方式1:Object形式
  1. 对象的定义
var 对象名=new Object();//对象实例(空对象)
对象名.属性名=值;//定义一个属性
对象名.函数名=function(){}//定义一个函数
  1. 对象访问
对象名.属性
对象名.函数名();

如果一个属性没有定义赋值就直接使用,该属性值就是undefined(变量提升)

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义对象</title>
    <script type="text/javascript">
        //自定义对象的方式
        //person是一个空对象,没有自定义的函数和属性
        var person = new Object();
        console.log(typeof person);//object
        //增加一个属性name
        person.name = "老虎";
        person.age = 35;
        //增加一个方法
        person.say = function () {
            //这里的this就是当前的person
            console.log("person="+this.name+" "+this.age);
        }
        //调用
        person.say();//person=老虎 35
        //如果一个属性没有定义赋值就直接使用,该属性值就是undefined
        console.log(person.email);//undefined
    </script>
</head>
<body>

</body>
</html>
  • 自定义对象方式2:{}形式
  1. 对象的定义
var 对象名={////多个属性和方法之间都要用逗号隔开
    属性名:值,//定义属性
    属性名:值,//定义属性,注意后面有逗号,
    函数名:function(){}//定义函数
};
  1. 对象访问
对象名.属性
对象名.函数名();

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义对象方式2:{}形式</title>
    <script type="text/javascript">
        //演示自定义对象方式2:{}形式
        var person = {//多个属性和方法之间都要用逗号隔开
            name: "孙悟空",
            age: 999,
            hi: function () {
                console.log("person信息=" + this.name + " " + this.age);
            },
            sum: function () {}
        };
        //使用
        console.log("外部访问 name=" + person.name);
        console.log("外部访问 age=" + person.age);
        person.hi();
    </script>
</head>
<body>

</body>
</html>

10.事件

JavaScript 事件 (w3school.com.cn)

10.1事件介绍

什么是事件?事件是电脑输入设备与页面进行交互的响应。我们称之为事件。

HTML 事件可以是浏览器行为,也可以是用户行为。

HTML 事件是发生在 HTML 元素上的“事情”。

当在 HTML 页面中使用 JavaScript 时,JavaScript 能够“应对”这些事件。

10.2事件的分类

  1. 事件的注册(绑定

    事件注册(绑定):当事件响应(触发)后要浏览器执行哪些操作代码,叫事件注册或事件绑定

  2. 静态注册事件

    通过html标签的事件属性直接赋于事件响应后的代码,这种方式叫做静态注册

  3. 动态注册事件

    通过js代码得到标签的dom对象,然后再通过dom对象.事件名=function(){},这种方式叫做动态注册

    js编程可以将浏览器整个页面的所有组件都映射成dom对象

  • 动态注册事件步骤
  1. 获取标签对象/dom对象
  2. dom对象.事件名=function(){}

10.3常用事件

10.3.1onload加载完成事件

onload:某个页面或图像被完成加载

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>onload加载完成事件</title>
    <script type="text/javascript">
        //定义函数
        // function sayOK() {
        //     alert("静态注册 onload 事件sayOK");
        // }

        //1.在js中,将页面窗口映射成window dom对象
        //2.window对象有很多的属性和函数,可以使用
        //3.window.onload表示页面被加载完毕
        //4.后面的function(){}表示页面加载完毕后,要执行的函数/代码
        window.onload = function () {
            alert("动态注册 onload 事件");
        }
    </script>
</head>
<body>
hello~~~
<input type="text" value="测试"/>
</body>
</html>

10.3.2onclick点击事件

onclick:鼠标点击某个对象

动态注册 onclick 事件

  1. 先拿到id=btn01的button对应的dom对象
  2. 通过dom对象动态绑定onclick事件
  3. 通过document的getElementById方法来获取对应的dom对象

注意:要获取某个标签的dom对象,就应该先加载完毕该标签后再获取。

一般使用window.onload让整个页面加载完毕后再动态注册

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>onclick 单击事件</title>
    <script type="text/javascript">
        function sayOK() {
            alert("你点击了sayOK按钮");
        }

        //当页面加载完毕之后,我们再进行动态注册
        window.onload = function () {//因此想要成功获取button的dom对象,就应该让button加载完毕再获取。
            //动态注册 onclick 事件
            //1.先拿到id=btn01的button对应的dom对象
            //2.通过dom对象动态绑定onclick事件
            //3.通过document的getElementById方法来获取对应的dom对象
            var btn01 = document.getElementById("btn01");
            btn01.onclick = function () {
                alert("你点击了sayHi按钮");
            }
        }
    </script>
</head>
<body>
<!--静态注册-->
<button onclick="sayOK()">sayOK按钮</button>
<!--动态注册-->
<button id="btn01">sayHi按钮</button>
</body>
</html>

10.3.3onblur失去焦点事件

onblur 事件会在对象失去焦点时发生。

onblur 经常用于Javascript验证代码,一般用于表单输入框。

例子

创建两个输入框,分别使用静态注册和动态注册的方法,将输入框中的小写英文变为大写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>onblur 失去焦点事件</title>
    <script type="text/javascript">
        //静态绑定
        function upperCase() {
            //1.先得到fname输入框的value值-->得到对应的dom对象
            //因为静态绑定是通过html标签的事件属性直接赋于事件响应后的代码,
            // 本身就是默认的页面加载完毕再执行的
            var fname = document.getElementById("fname");
            fname.value = fname.value.toUpperCase();
        }

        //动态绑定
        //在页面加载完毕之后再进行动态绑定
        window.onload = function () {
            //1.得到fname2对应的dom对象
            var fname2 = document.getElementById("fname2");
            fname2.onblur = function () {
                fname2.value = fname2.value.toUpperCase();
            }
        }
    </script>
</head>
<body>
静态:输入英文单词
<input type="text" id="fname" onblur="upperCase()"/><br/><br/>
动态:输入英文单词
<input type="text" id="fname2"/>
</body>
</html>

10.3.4onchange内容发生改变事件

当元素的值发生改变时,会发生 onchange 事件。

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>onchange 内容发生改变事件</title>
    <script type="text/javascript">
        //静态注册
        function mySal() {
            alert("工资范围发生了变化");
        }

        //动态注册
        window.onload = function () {
            //获取select01的dom对象
            var select01 = document.getElementById("select01");
            //给dom对象绑定onchange事件
            select01.onchange = function () {
                alert("所在地发生了变化");
            }
        }
    </script>
</head>
<body>
你当前的工资水平:<!--静态注册 onchange事件-->
<select onchange="mySal()">
    <option>--工资范围--</option>
    <option>10k以下</option>
    <option>10k-30k</option>
    <option>30k以上</option>
</select><br/><br/>
你当前所在地:<!--动态注册 onchange事件-->
<select id="select01">
    <option>--所在地--</option>
    <option>北京</option>
    <option>上海</option>
    <option>广州</option>
</select>
</body>
</html>

10.3.5onsubmit表单提交事件

onsubmit:注册按钮被点击,提交表单

onsubmit只能表单上使用,提交表单前会触发

例子

如果用户名或密码为空,就不能提交表单

点击注册按钮-->通过onsubmit事件进行验证-->验证通过,提交表单;不通过,不提交表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>onsubmit 表单提交事件</title>
    <script type="text/javascript">
        //静态注册表单提交事件
        function register() {
            //先得到输入的用户名和密码
            var username = document.getElementById("username");
            var pwd = document.getElementById("pwd");
            //判断是否为空“”
            if ("" == username.value || "" == pwd.value) {
                alert("用户名或密码不能为空,不能提交数据")
                return false;//不提交
            }
            return true;//提交
        }

        //动态注册单提交事件
        window.onload = function () {
            //得到form2的dom对象
            var form2 = document.getElementById("form2");
            //给form2绑定onsubmit事件
            //onsubmit绑定的函数,会直接将结果false or true 返回给submit
            form2.onsubmit = function () {
                //可以通过表单的dom对象拿到表单里面的值
                if ("" == form2.username.value || "" == form2.pwd.value) {
                    alert("用户名或密码不能为空,不能提交数据")
                    return false;//不提交
                }
                return true;//提交
            }
        }

    </script>
</head>
<body>
<h1>注册用户1</h1><!--静态注册表单提交事件-->
<!--注意这里要写return,使用register()返回的值,来判断是否执行该事件-->
<form action="ok.html" onsubmit="return register()">
    u:<input type="text" id="username" name="username"/><br/><br/>
    p:<input type="password" id="pwd" name="pwd"/><br/><br/>
    <input type="submit" value="注册用户">
</form>

<h1>注册用户2</h1><!--动态注册表单提交事件-->
<form action="ok.html" id="form2">
    u:<input type="text" name="username"/><br/><br/>
    p:<input type="password" name="pwd"/><br/><br/>
    <input type="submit" value="注册用户">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ok</title>
</head>
<body>
<h1>表单已提交到ok.html</h1>
</body>
</html>


10.3.6练习

  1. onsubmit:注册按钮被点击,提交表单,要求如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>练习</title>
    <script type="text/javascript">
        window.onload = function () {
            //获取form的dom对象
            var form = document.getElementById("form");
            //绑定onsubmit事件
            form.onsubmit = function () {
                //通过就继续,不通过就return false。过关斩将
                //即先考虑不正常的情况

                if (form.username.value.length < 4 || form.username.value.length > 6) {
                    alert("用户名长度不正确!")
                    return false;
                }
                if (form.pwd.value.length != 6) {
                    alert("密码长度不正确!")
                    return false;
                }
                if (form.pwd.value != form.pwd2.value) {
                    alert("两次密码不相同!")
                    return false;
                }
                //正则表达式
                //在java中,转义符为两个\\,在JavaScript中转义符只用一个\
                var emailPattern = /^[\w+]+@([a-zA-Z]+\.)+[a-zA-Z]+$/;
                //emailPattern.test("xxx"),验证xxx是不是满足正则表达式emailPattern的规则
                //如果满足就返回true,否则返回false
                if (!emailPattern.test(form.email.value)) {
                    alert("邮件格式不正确!")
                    return false;
                }
                return true;
            }
        }
    </script>
</head>
<body>
<h1>注册用户</h1>
<form action="ok.html" id="form">
    用户名:<input type="text" name="username">长度(4-6)<br/>
    密 码:<input type="password" name="pwd">长度(6)<br/>
    确 认:<input type="password" name="pwd2">长度(6)<br/>
    电 邮:<input type="text" name="email">满足基本格式<br/>
    <input type="submit" value="注册用户">
</form>
</body>
</html>

有关day05-JavaScript02的更多相关文章

  1. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  2. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  3. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  4. ruby-on-rails - rails : Find tasks that were created on a certain day? - 2

    我有一个任务列表(名称、starts_at),我试图在每日View中显示它们(就像iCal)。deftodays_tasks(day)Task.find(:all,:conditions=>["starts_atbetween?and?",day.beginning,day.ending]end我不知道如何将Time.now(例如“2009-04-1210:00:00”)动态转换为一天的开始(和结束),以便进行比较。 最佳答案 deftodays_tasks(now=Time.now)Task.find(:all,:conditio

  5. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  6. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  7. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  8. ruby-on-rails - 我将 Rails3 与 tinymce 一起使用。如何呈现用户关闭浏览器javascript然后输入xss? - 2

    我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如

  9. ruby - Rails 比较 date.end_of_day.to_datetime 和 date.to_datetime.end_of_day 返回的日期对象值时返回 false - 2

    ruby1.9.3dev(2011-09-23修订版33323)[i686-linux]轨道3.0.20最近为什么在与DateTimeonRails相关的RSpecs项目上工作我发现在给定日期以下语句发出的值date.end_of_day.to_datetime和date.to_datetime.end_of_day虽然它们表示相同的日期时间,但比较时返回false。为了确认这一点,我打开了Rails控制台并尝试了以下操作1.9.3dev:053>monday=Time.now.monday=>2013-02-2500:00:00+05301.9.3dev:054>monday.cla

  10. ruby - 使用 Selenium WebDriver 启用/禁用 javascript - 2

    出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=

随机推荐