JavaScript

JS是什么?

运行在客户端(浏览器)的编程语言,实现人机交互.


JS书写位置的三种方法

注意事项:JS文件引入和内嵌要写在HTML文档下面才能操作HTML文档,内嵌式JS里需要使用单引号

<!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>JS书写位置的三种方法</title>
</head>

<body>
    <!-- 行内式的JS 直接写到元素的内部 -->
    <input type="button" value="唐伯虎" onclick="alert('秋香姐')">


    <!-- 外部引入的JS中间不要写代码 -->
    <script src="wb.js"></script>

    <!-- 内嵌式的JS -->
    <script>
        alert('沙漠骆驼');
            // js尽量用单引号
    </script>
</body>

</html>

JS输出输入语法

<!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>JS输出输入语法</title>
</head>

<body>

    <script>

        //像body内输入内容
        document.write('<h1>标题元素</h1>');//如果输出内容写的是标签,也会被解析成网页元素

        // 效果是弹出一个对话框让用户输入文本
        prompt('请输入年龄');//返回的数据就是用户输入的数据

        // 弹出一个警示框给用户看
        alert('弹出警示框');

        // 输出到控制台,按F12找到控制台可以看
        console.log('我是程序员能看到的');           
    </script>

</body>

</html>

JS变量

变量的本质,变量名为空间的名字,数据是空间里的数据,指针是空间的位置

let

命名规则:

不能关键字:有特殊含义的字符,JavaScript内置的一些英语词汇。例如:let、var、if、for等
只能用下划线、字母、数字、$组成,且数字不能开头
字母严格区分大小写,如Age和age是不同的变量

遵守小驼峰命名规范

 JS常量

const

常量用const来声明,声明常量的时候必须赋值

声明的常量只能被赋值一次

 数据类型

基本数据类型:number数字型,string字符串型,boolean布尔型,undefined未定义型,null空类型

引用数据类型:object对象 

数字数据类型:JS不区分小数和整数和正负数,都可以用let来声明变量赋值.   %求余运算符经常用来看数据能不能被整除 

字符串类型:用单引号或者反引号括起来,反引号里可以存在变量书写方式  ${变量}  ,单引号里还需要引号就用双引号括起来.

字符串拼接的方法,用+号运算符,比如:    '一段字符串'+变量     或者'一段字符串'+'另一段字符串'  .  

重点:表单元素和pronpt()函数获取过来用户输入的数据都是字符串类型

字符串长度        字符串.length        得到的是字符串的长度数据

布尔值:        true(真)        false(假)        比如:        console.log(3>4),返回的值为false

布尔值转换Boolean(数据)

记忆:"、0、undefined、null、false、NaN转换为布尔值后都是false,其余则为true

undefined:只声明一个变量没有赋值就是undefined,用来判断有没有数据传递过来.

null:表示赋值了,但是内容为空

数据类型转换

console.log(typeof 变量或数据);//判断数据类型

隐式转换:        +号两边只要有一个字符串,都会把另外一个转换成字符串,除了+号以为的运算符都会把数据转成数字类型,如果加号用作正号使用可以把字符串转换成数字型比如:        +'123456'        会变成数字类型

显示转换:        Number(字符串)        把字符串转换成数字类型,

parselnt(数据),只保留整数,parseFloat(数据)可以保留小数点(数据里有除了数字的字符串就忽略)

综合案例-收集用户输入信息并渲染到网页

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h2>订单确定</h2>

    <script>
        //1.用户输入
        let price = +prompt('请输入商品价格:')
        let num = +prompt('请输入商品数量:')
        let address = prompt('请输入收获地址:')
        //2,计算总额
        let total = price * num
        //3.数据渲染到网页
        document.write(`
        <table>
            <tr>
                <th>商品名称</th>
                <th>商品价格</th>
                <th>商品数量</th>
                <th>总价</th>
                <th>收货地址</th>
            </tr>
            <tr>
                <td>小米</td>
                <td>${price}元</td>
                <td>${num}</td>
                <td>${total}元</td>
                <td>${address}</td>
            </tr>
        </table>
        `)
    </script>
</body>

</html>

运算符

赋值运算符        变量+=10        意思是        变量=变量+10;

一元运算符        ++变量        或者        变量++        ,软件开发中常用的是        变量++

分为前置自增和后置自增,区别在前置自增在当前函数运算完,后置自增在用变量运算完后跳出函数后再自增

比较运算符

>         左边是否大于右边
<         左边是否小于右边
>=       左边是否大于或等于右边
<=       左边是否小于或等于右边
==       左右两边值是否相等
===     左右两边是否类型和值都相等(开发中建议使用)
!==      左右两边是否不全等

比较结果为布尔类型,只会得到true或false

逻辑运算符

逻辑与        &&        两边只要有一边是假的那返回结果就是假的(false)

意思是看看两边有没有假的

逻辑或        ||           两边只要有一边是真的那返回结果就是真的(true) 

意思是看看两边有没有真的

逻辑非        !           取反,真的变成假的,假的变成真的

逻辑中断运用

<!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>Document</title>
</head>

<body>
    <!-- 1.用布尔值参与的逻辑运算 true&&false false 
    2.123&&456  
    
    逻辑与短路运算 如果表达式1结果为真则返回表达式2,如果表达式1为假那么返回表达式1

    逻辑或短路运算 如果表达式1结果为真则返回表达式1,如果表达式1为假那么返回表达式2 -->

    <!-- 逻辑与中断运算 -->
    <script>
        console.log(123 && 456);//456
        console.log(0 && 456);//0
        console.log(0 && 456 + 5 && 5 * 5);//0
        console.log(1 && 2 * 5 && 5 - 3 && 0 && 5);//0
        console.log(1 && 2 * 5 && 5 - 3 && 1 && 5);//5
    </script>

    <!-- 逻辑或中断运算 -->
    <script>
        console.log(123 || 456);//123
        console.log(0 || 456);//456
        console.log(0 || 456 + 5 || 5 * 5);//461
        console.log(1 || 2 * 5 || 5 - 3 || 0 || 5);//1
        console.log(1 || 2 * 5 || 5 - 3 || 1 || 5);//1

        let num = 0;
        console.log(123 || ++num);
        console.log(num);//结果为0,因为已经逻辑中断了,后面不做计算

    </script>
</body>

</html>

运算符的优先级,小括号>一元运算符>算数运算符>关系运算符>相等运算符>逻辑运算符>赋值运算符>逗号运算符

 JS语句

表达式和语句的区别:表达式是可以被求职的代码,语句是一段可以执行的代码

表达式:因为表达式可被求值,所以它可以写在赋值语句的右侧。
表达式        num =3+4        表达式最终都会有一个结果返回给我们,我们称为返回值。
语句:而语句不一定有值,所以比        如alert()        for和break等        语句就不能被用于赋值。
语句        alert()弹出对话框        console.log()控制台打印输出 

if分支语句

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        //条件语句
        if (条件) {
            //条件为真(满足条件)执行这里
        } else {
            //不满足条件执行这里
        }
        
        //多个条件语句
        if (条件1) {
            //满足条件1执行这里
        } else if(条件2){
            //满足条件2执行这里
        }else if(条件3){
            //满足条件3执行这里
        }        
        else {
            //都不满足条件执行这里
        }
    </script>
</body>

</html>

三元运算符(一般用来取值)

<!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>Document</title>
</head>

<body>

    <script>
        // 语法结构
        // 条件表达式 ? 表达式1 : 表达式2
        // 如果表达式结果为
        // 真 则返回表达式1的值 
        // 假 则返回表达式2的值
        var num = 10;
        var a;
        //先比较num>5,结果为真执行表达式1返回字符串'是',并赋值给a;
        //先比较num>5,结果为假执行表达式2返回字符串'不是',并赋值给a;
        a = num > 5 ? '是' : '不是';
        alert(a);
    </script>
    <!-- 数字补0案例 -->
    <script>
        /* 用户输入数字,如果数字小于10.则在前面补零
        如果数字大于10则不需要 */
        var b = prompt('请输入一个数字');
        var c;
        c = b < 10 ? ('0' + b) : b;
        alert(c);
    </script>
    <!-- 返回用户输入最大值案例 -->
    <script>
        //1.用户输入
        let num1 = +prompt('请您输入第一个数:')
        let num2 = +prompt('请您输入第二个数:')
        //2.运算比较
        num1 > num2 ? alert(`最大值是:${num1}`) : alert(`最大值是:${num2}`)
    </script>
</body>

</html>

switch语句(选择语句)

<!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>Document</title>
</head>

<body>
    <!-- switch 语句也可以实现多选1
    switch(表达式){
        case 值1:执行语句1;break;
        case 值2:执行语句2;break;
        case 值3:执行语句3;break;
        default:如果都匹配不上执行这个语句;
    }
    表达式的值必须和case的值全等才能匹配,每个case后执行完一定要break,不然会一直执行下去 -->
    <!-- 输入水果名字查询价格 -->
    <script>
        var a = prompt('请输入您查询的水果');

        switch (a) {
            case '荔枝': alert('荔枝3块钱一斤'); break;
            case '西瓜': alert('荔枝2块钱一斤'); break;
            case '苹果': alert('荔枝5块钱一斤'); break;
            case '芒果': alert('荔枝10块钱一斤'); break;
            case '龙眼': alert('荔枝4块钱一斤'); break;
            case '榴莲': alert('荔枝30块钱一斤'); break;
            case '香蕉': alert('荔枝1块钱一斤'); break;
            default: alert('查询不到这个水果'); break;
        };
    </script>
</body>

</html>

while和do  while

<!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>Document</title>
</head>

<body>

    <script>
        //while
        while (条件表达式) {
            循环体代码
        }

        //do while 
        do {

        } while (条件表达式)//先执行一次循环体,再判断
    </script>
</body>

</html>

for循环

<!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>Document</title>
</head>

<body>

    <script>
        /* 找出1-100和的平均值 */
        let age;
        for (let i = 1; i <= 100; i++) {
            age = age + i;//num一直存在前面运算的结果再+i          
        }
        console.log(age / 100);

        /* 分别求出奇数和偶数的和 */
        let even = 0, odd = 0;
        for (let i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                even = even + i
            } else {
                odd = odd + i;
            }
        }
        console.log(even, odd);
        /* 求出1-100可以被3整除的数的和 */
        let san = 0;
        for (i = 1; i <= 100; i++) {
            if (i % 3 == 0) {
                san = san + i;
            }
        }
        console.log(san);
    </script>
</body>

</html>

循环退出

break:退出循环                continue:结束本次循环,继续下次循环        配合if语句来使用

 数组

数组:是一种可以按顺序保存数据的数据类型

<!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>Document</title>

</head>

<body>
    <!-- 数组的创建方式
    1.利用new创建数组
    var arr = new Array();(学对象的时候用得到)
    2.利用数组的字面量创建数组
    var 数组名=[];创建了一个空数组
    var 数组名 =['小白','小黑','大黄'];

    数组里面用逗号分开,数组里可以存任意数据类型 -->
    <script>

        //元素:数组中保存的每个数据都叫数组元素
        //下标(索引):数组中数据的编号,从0开始
        //长度:数组中数据的个数,通过数组的length属性获得,比如:数组.length
        let arr = ['小白', 3, true];
        console.log(arr[1]);//获取访问数组元素的方法


        /* 遍历数组 */
        //使用for循环根据数组的长度来遍历
        let brr = [2, 6, 1, 7, 4]
        //1.求和的变量sum
        let sum = 0 //要先赋值,因为等下参与运算
        //2.遍历累加
        for (let i = 0; i < brr.length; i++) {
            //console.Log(arr[i])
            sum = sum + brr[i]
        }
        //使用for(let=key in arr) {}来遍历
        for (let key in arr) {
            console.log(key)//注意key返回的是字符串类型的索引号 0 1 2
            console.log(arr[key]);//从索引号0开始打印到数组最后
        }


        /* 数组新增元素的两种方式 */
        //数组.push(元素1,元素2),将元素添加到数组的末尾,并返回该数组的新长度
        let crr = ['1', '2']
        crr.push(3)
        console.log(crr, crr.push(3));
        //数组.unshift(元素1,元素2),将元素添加到数组的开头,并返回该数组的新长度

        /* 数组删除元素的方式 */
        //数组.pop(),删除数组最后一个元素,并返回改元素的值,不用传参数
        //数组.shift(),删除数组第一个元素,并返回改元素的值,不用传参数
        //数组.splice(起始位置,删除第几个元素),需要传递参数
    </script>

</body>

</html>

数组的拼接 

<script>
        let s = Array('a','p','p','l','e')
        document.write(s.join(''))//输出结果:apple
 </script>
    <script>
        let s = Array('Apple','is','on','my','table')
        //将数组元素以空格分割
        document.write(s.join(' '))//join(' ') 
        //输出结果:Apple is on my table
    </script>

 

    <script>
        let s = Array(1,2,3)
        console.log(s)
        //join()将数组每个元素都转为字符串,用法等同于toString()
        console.log(s.join())
    </script>

数组遍历和映射

const numbers = [1, 2, 3, 4, 5];
 
const doubledNumbers = numbers.map(num => num * 2);
 
console.log(doubledNumbers); // [2, 4, 6, 8, 10]
 格式: arr.map((item,index,arr)=>{
 
      数组循环操作从[0]开始到最后          
 
 
});
 
操作完赋值给一个新的  数组变量
原数组不变
 
                item:数组元素,当前元素
 
                index:当前元素的下标
 
                arr:当前元素所在的数组
//1.封装获取图书列表的函数
function getBooksList() {
    //获取数据
    axios({
        url: 'http://hmajax.itheima.net/api/books',
        params: {
            creator
        }
    }).then(result => {
        //获取到数据为一个数组
        const bookList = result.data.data;
        console.log(bookList);
        
        //渲染数据,把获取到的数组渲染到网站上
        const htmlStr = bookList.map((item,index) => {//item为当前的数组元素,如果数组元素是对象那就是当前对象名,index为当前数组的下标比如[0],[3],bookList为原数组,htmlStr为新数组
            /* 添加id方便找到当前的td */
            console.log(item,index);
            return `<tr>
                    <td>${index + 1}</td>
                    <td>${item.bookname}</td>
                    <td>${item.author}</td>
                    <td>${item.publisher}</td>
                    <td data-id=${item.id}>
                        <span class="del">删除</span>
                        <span class="edit">编辑</span>
                    </td>
                </tr>`
        }).join('');//拼接一个空字符串,让数组变成字符串
         console.log(htmlStr);
        document.querySelector('.list').innerHTML = htmlStr
    })
}
//打开网址时执行一次获取并渲染的函数
getBooksList()

函数

<!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>Document</title>
</head>

<body>
    函数就是封装一段代码
    调用一次就是让函数执行一遍里面的代码,没有参数也可以调用
    <script>
        /* 具名函数 */
        /* 声明函数,声明函数不执行代码,调用的时候才执行 */
        function getSum(num1, num2) {//设置两个形参
            //作用域,在函数里声明的变量只能在函数体里面使用,函数走完就销毁
            var sum = 0;
            for (var i = num1; i <= num2; i++) {
                sum += i;
            }
            console.log(sum);
        }
        getSum(1, 100);//输入实参函数的调用,num1=1;num2=100;一个赋值的过程
        console.log(getSum(1, 100))//改代码执行一次函数调用,然后返回undefined,表示一个变量声明了没有赋值,就是函数没有返回值

        //注意点,如果传入的是数组,形参最好写成数组格式比如:arr[]

        //函数返回值
        function fn() {
            return 20//返回值后面的代码不再执行,如果没有return的函数返回undefined
        }//相当于把返回值赋值给fn(),fn()=20
        console.log(fn());//打印出来结果为20



        /* 匿名函数 */
        //与具名函数的区别,具名函数声明可以写在任意位置,匿名函数必须先声明函数后调用
        //匿名函数常用在点击事件里
        let fun = function () {
            console.log('1');
        }
        fun()//调用函数
        console.log(fun)//把整个函数一五一十打印出来

        /* function这个关键字可以当作语句也可以当作表达式 */
        //语句
        function fn1() { };
        //表达式
        let fn2 = function () { };



        /* 立即执行函数 */
        //利用变量的作用域,可以在立即执行函数里声明变量,避免全局变量的污染
        //前面用+号是因为避免让JS引擎理解为这是一个表达式
        +function () {
            let a = 10;
            console.log(a);
        }()
            + function () {
                let a = 20;
                console.log(a);
            }()//


    </script>
</body>

</html>

对象

对象(object)是什么?是JS里的一种数据类型

可以理解为是一种无序的数据集合,用来描述一个事物,比如描述一个人

对象由属性和方法组成

属性:信息或叫特征(名词),比如 手机尺寸,重量,颜色,等...        属性名:属性值

方法:功能或叫行为(动词),比如打电话,发短信,玩游戏        方法名:函数

<!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>Document</title>
    <script>
        /* 利用对象字面量创建对象 */
        let obj = {
            name: '张三',
            age: 18,
            sex: '男',
            'goods-name': '法外狂徒',
            sayHi: function () {
                console.log('hi~');
            }//相当于把函数赋值给变量sayHi
        }
        //里面的属性或者方法采取键值对的形式  键:属性名,值:属性值
        //属性名就是依附在对象里的变量

        /* 方法一,使用对象,对象名.属性名 */
        console.log(obj.name);

        /* 方法二,对象名['属性名'] */
        console.log(obj['goods-name']);

        /* 方法三,调用对象的方法 对象名.方法名 */
        obj.sayHi();


        /* 对象数据的增删改查 */
        //增加
        obj.height = 183//用新的属性名赋值
        //删除
        delete obj.sex
        console.log(obj);//已经把age: 18,删除
        //改
        obj.name = '李四'
        console.log(obj);//把张三改为了李四
        //查询
        console.log(obj['goods-name']);


        /* 遍历对象 */
        for (let key in obj) {
            console.log(key)//得到的是所有属性名,字符串型
            //console.log(obj.key)错误写法,因为key得到的是字符串不是变量
            console.log(obj[key])//需要使用这样方式来得到数据
        }


    </script>
</head>

<body>

</body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值