【JavaStript】

目录

🐷1. JavaScript 的书写形式

🛩1.1 行内式

💛 1.2 内嵌式

🍗1.3 外部式

🍿2. JavaScricpt 的一些常用语句

🛴2.1  输入:prompt

👽2.2 输出:alert

🎨2.3 console.log

💕2.4 相关代码练习

🚌3. JavaScript 语法

🚒3.1 变量的使用

🎉基本数据类型

🍳3.2 JavaScript 运算符

🍩3.3 JavaScript 数组

🚀3.4 JavaScript 函数

🤴4. JavaScript 作用域

5. JavaScript 对象

👑5.1 使用 字面量 创建对象(常用)

🎈6. JavaScript 实例

🥇6.1 更换网址图片

🎅 6.2 猜数字游戏

🍶6.3 聚合搜索

🍎6.4 表白墙


前端三剑客:JavaScript、CSS 以及 HTML。我在前一篇文章中已经介绍了 HTML 的相关内容(HTML) 。这三者各自意味着什么呢?

看了我前一篇关于 HTML 的文章,大家就会发现,HTML 写出来的网页十分简陋,一点都不高大上!这是因为一个好看又实用的网站,往往需要前端三剑客的互相配合。HTML 负责网页的结构(骨)、CSS 负责网页的颜值(皮),而 JavaScript 负责让网页动起来。

JavaScript 是一种网页脚本语言,有自己的语法,但由于该门语言的创建者布兰登·艾奇(Brendan Eich)只用了 10 天时间便创建出 JS,所以 JS 会存在某些细节考虑的不够严谨的问题。

虽然 JS 的确存在一些缺陷,但依旧不影响它在网页设计上发挥的重大作用。

JavaScript 的工作原理是通过在 HTML 网页中直接嵌入 JS 脚本,实现读写HTML元素内容,更改HTML元素样式等功能。

在介绍 JavaScript 语法之前,先介绍一下 JavaScript 在 HTML 中的书写形式

1. JavaScript 的书写形式

1.1 行内式

JS 的代码直接写到 html 语句的内部:

 1.2 内嵌式

写到 script 标签中,并且 script 标签最好写在 </body> 前。

    <script>
        alert('你好世界!')
    </script>

 把 script 标签写到 head 标签里面,可以吗?

最好不要这样,因为 HTML 的运行顺序是从上到下的,如果在 head 里放 script 标签,可能会造成问题。比如以下情况:

<body>
    <input id="btnl" type="button" value="点我一下下" onclick="console.log('hello.javascript')">
</body>

 上述代码表示,按一下按钮,在控制台上输出 hello.javascript。

如果在 head 里放 script 标签,而 script 标签中的代码需要的参数,还未被执行,这就会产出 bug:

<head>
......
<script>
        alert(document.getElementById("btnl").value)
    </script>
</head>
<body>
    <input id="btnl" type="button" value="点我一下下" onclick="console.log('hello.javascript')">
</body>

 基于上述原因,script 标签最好写在 </body>的前一行,而不要写在 head 标签里头。

<body>
    <input id="btnl" type="button" value="点我一下下" onclick="console.log('hello.javascript')">
    <script>
        alert(document.getElementById("btnl").value)
    </script>
</body>

1.3 外部式

写到单独的 js 文件中,这样的文件往往可供多个 html 文件调用的,反而不依赖每个 html 文件中 body 标签里的内容,这种写法反而更推荐写在 head 标签中。

<head>
......
<script src = "tools.js"></script>
</head>

 tools.js 文件中的代码:

alert("hello world!");

2. JavaScricpt 的一些常用语句

2.1  输入:prompt

弹出一个输入框

    <script>
        prompt("请输入你的姓名:");
    </script>

2.2 输出:alert

弹出一个警示的对话框

2.3 console.log

在控制台打印一个日志(供程序员看)

console.log("这是一条日志");

日志是程序员调试程序的重要手段。

2.4 相关代码练习

        var name = prompt("请输入你的姓名?");
        var age = prompt("请输入你的年龄?");
        var gender = prompt("请输入你的性别");
        alert("姓名:"+name+"年龄:"+age+"性别:"+gender);

 

3. JavaScript 语法

就问一句,JavaScript 与 Java 之间有什么密切联系吗?给大家来一组类比,就解释清楚了:JavaScript 与 Java 的关系,就好比雷锋与雷锋塔之间的关系、印度与印度尼西亚之间的关系、周杰与周杰伦之间的关系以及黑客与博客之间的关系。

也就是说,JavaScript 与 Java 之间啥关系也没有。但是 JavaScript 的一些基本语法与 java 的一样。下面只挑一些与 java 基本语法不一样的来展示。

3.1 变量的使用

var name = 'lisi';
var age = 20;

var 是 JS 中的关键字,表明这是一个变量。每个语句最后都会带有 ; 结尾,在 JS 中可以省略,但建议加上。  如果初始化的值为字符串,那么使用单引号或双引号引起来即可。

基本数据类型

JS 中内置的几种类型

number:数字,不区分整数和小数

boolean:参与运算时当作 1 和 0 来看待

String:字符串类型

undefined:只有唯一的值 undefined,表示未初始化的值

null:只有唯一的值 null,表示空值

        //undefined 数据类型
        var num ;
        console.log(num);
        console.log(num+"你好");
        console.log(num+10);

        //null 数据类型
        var num1 = null;
        console.log(num1);
        console.log(num1+"你好");
        console.log(num1+10);

输出:

undefined
undefined你好
NaN
null
你好
10

JavaScript 中存在的其中一个问题是,类型转换不确定。

<body>
    <script>
        var num = 5;
        var num1 = "5";

        alert(num + num1);
    </script>
</body>

 从结果中可以看出,一个数字+字符串,数字被转换成字符串了,相加变成了字符串的拼接。

可如果是 :

alert(num - num1);

结果却又是: 

 可以看出,在减法里面,字符串又被转换成数字。

所以为了安全起见,当你想使用数字类型时,建议使用 parseInt 强制类型转换一下。

alert(parseInt(num) + parseInt(num1));

这样就能输出 10 了。

下面再看一个例子:

        var num = prompt("判断奇偶,请输入一个数字:");
        console.log(num + 10);

输入了 12,控制台输出 1210 ,也就意味着,prompt 输入的数字会被转换成字符串,所以在我们使用 prompt 输入的数字时,一定要强制转换成数字才行:

        var num = prompt("判断奇偶,请输入一个数字:");
        console.log(num + 10);
        console.log(parseInt(num) + 10);
        if(parseInt(num) % 2 == 1){
            alert(num+"->奇数");
        }else{
            alert(num+"->偶数");
        }

3.2 JavaScript 运算符

JavaScript 中的运算符和 Java 用法基本相同。此处不做详细介绍了。但有一个需要注意的点,那就是 JavaScript 中,== 有隐式类型转换,而 === 没有隐式类型转换。

        var num = 1;
        var num1 = "1";
        console.log(num == num1);
        console.log(num === num1);

输出:

true

false

3.3 JavaScript 数组

        //数组
        var arr = new Array();
        //或者写成
        var arr1 = [];
        arr.push(1);
        arr.push("hello");
        arr.push("world");

        for(var i = 0; i < arr.length; i++){
            console.log(arr[i]);
        }

输出:

1

hello 

world

修改数组元素,这次使用 for ... of 打印:

        arr[1] = "hey";

        for(var term of arr){
            console.log(term);
        }

输出:

1

hey

world

删除数组元素

使用 splice ,有两个参数,第一个参数表示从下标为 i 的位置开始删除. 第二个参数表示要删除的元素个数。

        arr.splice(1,1);
        for(var term of arr){
            console.log(term);
        }
        console.log(arr.length);

输出:

1

world

2

也可以使用 slice 来截取,不会改变原数组的结果:

    //原数组为 1 hey world
        var obj = arr.slice(1,2); //左闭右开
        for(var term of obj){
            console.log(term);
        }

输出:

hey

查看数组的最后一个元素,并删除

        //arr的元素有:1 hey world
        console.log(arr.pop());
        console.log(arr.length);

输出:

world

2

3.4 JavaScript 函数

语法格式:

// 创建函数/函数声明

function 函数名(形参列表){

       函数体

       return 返回值;

}

  

// 函数调用

函数名(实参列表)  //不考虑返回值

返回值 = 函数名(实参列表)  //考虑返回值

    <input type="button" value = "添加" onclick = "add('张三','123')">&nbsp;&nbsp;&nbsp;
    <input type="button" value = "修改" onclick = "alter('张三','123456')">&nbsp;&nbsp;&nbsp;
    <script>
    //函数的形参甚至可以没有数据类型!
    function add(name, password){
        alert("添加信息成功!      "+"姓名:"+name+"  密码:"+password);
    }

    funtion up(){
        alert("修改信息成功!!");
    }
    </script>

 JavaScript 存在的第二个问题,便是函数实参与形参个数如果不匹配,程序照样能跑。在 script 标签中调用 add(),什么参数都没写,。:

 这也就意味着,JavaScript 不存在重载!

同样的,对于 alter 这个方法,它是没有参数,但调用时给他传参数了,也依旧可以运行。

那我们怎么拿到传给 alter 的所有参数呢?方法里面有个隐藏的参数,argument:

    function alter(){
        alert("修改信息成功!!");
        for(var item of arguments){
            console.log(item);
        }
    }

 

4. JavaScript 作用域

没有包含在方法中的所有代码,都叫全局代码,会随着页面的加载而执行。而方法只有被调用了,才会被执行。

        var num = 10;
        console.log(num);

        function test1(){
            //局部变量
            var num = 20;
            console.log(num);
        }

        function test2(){
            //局部变量
            var num = 30;
            console.log(num);
        }

        test1();
        test2();

        console.log(num);

输出:

10

20

30

10

        var num = 10;
        console.log(num);

        function test1(){
            var num = 20;
            console.log(num);
        }

        function test2(){
            //修改了全局变量 num
            num = 30;
            console.log(num);
        }

        test1();
        test2();

        console.log(num);

输出:

10

20

30

30

甚至于一开始就没有全局变量,在方法中没有写 var ,JS 也会替你创建一个全局变量:

       function test2(){
            num = 30;
            console.log(num);
        }

        test2();

        console.log(num);

输出:

30

30

所以 JavaScript 后期给出了一个关键字 let ,来严格的修饰局部变量。

5. JavaScript 对象

在 JS 中,字符串,数值,数组,函数都是对象。每个对象中包含若干的属性和方法。

5.1 使用 字面量 创建对象(常用)

        //创建了一个空对象
        var a = {};

        var student = {
            name : "莉丝",
            age: 19,

            sayHi:function() {
                console.log(student.name+"正在与你打招呼~");
            }
        };

        console.log(student.name);
        student.sayHi();

输出:

莉丝
莉丝正在与你打招呼~

6. JavaScript 实例

6.1 更换网址图片

<body>
    <img width="200px" height="120px" id="img_logo" src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png">

    <p></p>
    <input type="button" value="更换图片" onclick="changeImg()">

    <script>

        function changeImg(){
            var sg_img = "https://dlweb.sogoucdn.com/pcsearch/web/index/images/logo_880x280_06c7476.png?v=628ed034";
            document.getElementById("img_logo").src = sg_img;
        }
    </script>
</body>

 

 6.2 猜数字游戏

<body>
    <div>
        <h2>猜数字游戏</h2>
        玩家输入一个 1 ~ 10 数字:<input id="input_num" type="text"><p></p>
        <input type="button" value=" 查看结果 " onclick="selectResult()">
        <div id = "result_div">

        </div>
    </div>

<script>
        function selectResult(){
            // 产生随机数 1 ~ 10
            var randomNum = 1 + Math.floor(Math.random()*10);
            var userInputNum = document.getElementById("input_num").value;
            var msg ;
            if(randomNum == userInputNum){
                msg = "<h4> 恭喜:猜对了</h4>";
            }else{
                msg = "<h4>抱歉:猜错了,正确的数字是:" + randomNum + "</h4>";
            }
            document.getElementById("result_div").innerHTML = msg;

        }
</script>
</body>

 还可以使用 jQuery 实现。 jQuery 是 JavaScript 的一个框架,极大地简化了 JavaScript 的代码。

     function selectResultJq(){
            var randomNum = Math.floor(Math.random()*10)+1;
            var userInputNum = jQuery("#input_num").val();
            var msg;
            if(randomNum == userInputNum){
                msg = "<h4> 恭喜:猜对了</h4>";
            }else{
                msg = "<h4>抱歉:猜错了,正确的数字是:" + randomNum + "</h4>";
            }
            jQuery("#result_div").html(msg);
        }    

6.3 聚合搜索

 

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>聚合搜索</title>
    <script src="jquery.min.js"></script>
</head>
<body>
    <div style="width: 100%; text-align: center;">
    <input type="button" value="必应" onclick="upSearch('https://www.bing.com/')">&nbsp;&nbsp;&nbsp;
    <input type="button" value="搜狗" onclick="upSearch('https://www.sogou.com/')">&nbsp;&nbsp;&nbsp;
    <input type="button" value="360" onclick="upSearch('https://www.so.com/')">&nbsp;&nbsp;&nbsp;
    </div>

    <hr>
    <iframe id="ifr" style="width: 100%; height: 600px;" src="https://cn.bing.com/"></iframe>

    <script>
        function upSearch(url){
            jQuery("#ifr").attr("src",url);
        }
    </script>
</body>
</html>

6.4 表白墙

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表白墙</title>
    <script src="jquery.min.js"></script>
</head>
<body>
    <div style="width: 100%;text-align: center;">
        <h2>表白墙</h2>
        谁&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<input id="username"><p></p>
        对谁&nbsp;&nbsp;&nbsp;:<input id="tousername"><p></p>
        说什么:<input id="msg"><p></p>
        <input type="button" value="提交" onclick="submit()"><p></p>
        <div id="div_allmsg">

        </div>

    </div>

    <script>
        function submit(){
            var username = jQuery("#username");
            var tousername = jQuery("#tousername");
            var msg = jQuery("#msg");

            //非空校验
            //trim() 是为了防止用户输入空格
            // return 是因为用户没有输入信息,不再执行之后的代码!
            if(username.val().trim() == ""){
                alert("请先输入您的姓名!");
                username.focus();
                return;
            }

            if(tousername.val().trim() == ""){
                alert("请输入对方的姓名!");
                tousername.focus();
                return;
            }

            if(msg.val().trim() == ""){
                alert("请先输入想要传达的信息!");
                msg.focus();
                return;
            }

            // 2.将内容展示在表白墙上
            jQuery("#div_allmsg").append(username.val()+"对"+tousername.val()+"说"+msg.val()+"<p></p>");

            // 3. 清空输入的内容
            username.val("");
            tousername.val("");
            msg.val("");

        }
    </script>
</body>
</html>


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值