js基础day5

一、对象

在这里插入图片描述

在这里插入图片描述

1.什么是对象

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2. 对象使用

在这里插入图片描述

(1)什么是对象以及对象的基本使用

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

(2)对象的操作-增删改查

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

删了解一下即可,因为最新的语法严格格式里面,删是不允许这么直接去删的
在这里插入图片描述在这里插入图片描述在这里插入图片描述

查的两种方法

在这里插入图片描述

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

<body>
    <script>
        // 尽量不要用name因为有的是作为默认的保留字,会出问题  如console.log(window.name)
        // 最后一个可以不用逗号隔开,前面的必须用逗号隔开
        // 1.声明对象
        let pepper = {
            uname: 'pepper女士',
            age: 30,
            gender: '女'
        }
        console.log(pepper);
        // 检测数据类型
        console.log(typeof pepper);

        let obj = {
            // uname: '小米10青春版',
            'goods-name': '小米10青春版',
            num: '100012816024',
            weight: '0.55kg',
            address: '中国大陆'
        }
        /*  obj.price = '4399元'
         console.log(obj); */
        /*  obj.sing = function () {
             console.log(hi);
         } */
        /*   console.log(obj.uname); */
        //   2. 使用属性 查  对象名.属性名
        // console.log(obj.address);
        // 3. 改  
        // 与改变量的取值类似
        /*  let num = 10
         num = 20
         console.log(num); */
        /*  obj.address = '重庆'
         console.log(obj); */
        // 4. 增
        /*  obj.sale = '骨折'
         console.log(obj); */
        // 5. 删(了解)
        /*   delete obj.sale
          console.log(obj); */

        // 练习
        obj.uname = '小米10 PLUS'
        obj.color = '粉色'
        console.log(obj.uname);
        console.log(obj.num);
        console.log(obj.weight);
        console.log(obj.address);
        console.log(obj.color);
        // console.log(obj.goods - name);  错误
        // 查的另外一种属性
        // 对象名['属性名']
        // 因为这种方法属性名要加引号 就当字符串来看了 -就不会被解析为减号了  进行字符串的拼接
        console.log(obj['goods-name']);


        // 查总结:
        // (1)对象名.属性名  obj.age
        // (2)对象名['属性名']  obj['age']
    </script>
</body>

</html>

在这里插入图片描述

(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>
</head>

<body>
    <script>
        // 多个属性之间用逗号分隔,最后一个可以不用写
        let obj = {
            uname: '刘德华',
            // 方法
            song: function (x, y) {
                // console.log('冰雨');
                console.log(x + y);
            },
            dance: function () {
                console.log('爱的华尔兹');
            }
        }
        // 方法调用  对象名.方法名
        // obj.song()
        obj.song(1, 2)
        // 不能 console.log(obj.song(1, 2));    //undefined 因为没有return



        // document.write()是一个典型的方法
    </script>
</body>

</html>

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>
</head>

<body>
    <script>
        // for in我们不推荐遍历数组
        let arr = ['pink', 'black', 'purple']
        for (let k in arr) {
            console.log(k);    // 打印出来是数组的下标(索引号)  但是它的数据类型是字符串(控制台里面是黑色)
            console.log(arr[k]);   //我们不用for in去遍历数组的原因:索引号是字符串型,后面很容易出问题 '0' '1' '2'
            // 1. for in遍历对象  
            // 不用以前的for循环是因为我们不知道下标,长度
            let obj = {
                uname: '烤串',
                age: 20,
                gender: '男'
            }
            // 2. 遍历对象
            for (let k in obj) {
                console.log(k);    //打印出来是属性名  且是字符串形式'uname' 'age'
                // console.log(obj.k);    打印出来是3个undefined 
                // 原因:相当于console.log(obj.'uname');
                // 这种格式的正确写法:console.log(obj.unmae);
                // 依据另外一种格式:console.log(obj['uname']);
                // 'uname' === k 输出属性值 obj[k]
                console.log(obj[k]);
            }
        }
    </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>遍历数组对象</title>
</head>

<body>
    <script>
        let students = [
            { name: '小明', age: 18, gender: '男', hometown: '河北省' },
            { name: '小红', age: 21, gender: '女', hometown: '海南省' },
            { name: '小刚', age: 22, gender: '男', hometown: '山东省' },
            { name: '小李', age: 18, gender: '女', hometown: '陕西省' }
        ]
        for (let i = 0; i < students.length; i++) {
            // console.log(i);    //打印出来的是下标(索引号)  是数字型的  所以我们不用for in 
            // console.log(students[i]);   //打印出来的是每一个对象
            // console.log(students['name']);  //undefined
            console.log(students[i].name);
            console.log(students[i].hometown);
        }
    </script>
</body>

</html>

在这里插入图片描述

4.渲染学生信息表案例

在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>渲染学生信息表案例</title>
    <style>
        table {
            width: 600px;
            text-align: center;
        }

        table,
        th,
        td {
            border: 1px solid #ccc;
            border-collapse: collapse;
        }

        caption {
            font-size: 18px;
            margin-bottom: 10px;
            font-weight: 700;
        }

        tr {
            height: 40px;
            cursor: pointer;
        }

        table tr:nth-child(1) {
            background-color: #ddd;
        }

        /* 除了第一行,鼠标放上去都会变底色 */
        table tr:not(:first-child):hover {
            background-color: #eee;
        }
    </style>
</head>

<body>
    <h2>学生信息</h2>
    <p>将数据渲染到页面中...</p>

    <table>
        <caption>学生列表</caption>
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>性别</th>
            <th>家乡</th>
        </tr>
        <!-- 从第二行开始渲染,因为别的都是固定的,不需要去渲染 -->
        <script>
            // 1. 数据准备
            let students = [
                { name: '小明', age: 18, gender: '男', hometown: '河北省' },
                { name: '小红', age: 21, gender: '女', hometown: '海南省' },
                { name: '小刚', age: 22, gender: '男', hometown: '山东省' },
                { name: '小李', age: 30, gender: '女', hometown: '重庆市' },
                // 如果新来一个人,页面是不需要动的,只需要新添一条数据即可
                { name: '小杨', age: 66, gender: '男', hometown: '贵州省' }
            ]
            // 2. 渲染页面
            for (let i = 0; i < students.length; i++) {
                document.write(`
                <tr>
                    <td>${i + 1}</td>
                    <td>${students[i].name}</td>
                    <td>${students[i].age}</td>
                    <td>${students[i].gender}</td>
                    <td>${students[i].hometown}</td>
                </tr>
                `)
            }
        </script>

    </table>

</body>

</html>

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>数学内置对象Math</title>
</head>

<body>
    <script>
        // 属性
        console.log(Math.PI);
        // 方法
        // ceil天花板的意思  向上取整
        console.log(Math.ceil(1.1));  //2 
        // floor 向下取整
        console.log(Math.floor(1.9));  //1
        console.log('------------------------');
        // 四舍五入 round
        console.log(Math.round(1.1));   //1
        console.log(Math.round(1.5));   //2
        console.log(Math.round(1.9));   //2
        console.log(Math.round(-1.1));  //-1
        // 我们以前学的四舍五入是往数字大了取,-1.5应该是-2,但是这里是往加了符号谁大往哪边取
        console.log(Math.round(-1.5));  //-1
        console.log(Math.round(-1.9));  //-2
        console.log(Math.round(-1.51));  //-2


        // 前面学过的取整函数  parseInt(1.6)  //1  它有个特点:不管后面的小数部分多大都会舍弃
        // parseInt('12px')  //12   parseInt()和Math.floor()作用类似 但是parseInt()里面加字符串会省略掉字符串部分,而Math.floor则显示NaN,它只能放数值不能放字符串
        console.log(Math.max(1, 2, 3, 4, 5));   //数组没有这个方法,数组还是需要我们去求,或者后面学了学了扩展运算符能有很多小技巧筛选出数组,一句话就行,不需要遍历
        console.log(Math.min(1, 2, 3, 4, 5));
        // 取绝对值
        console.log(Math.abs(-99));

        // null类似 let obj = {}
        let obj = null  //null通常用于我们这个变量将来要放对象,但是我们还没准备好对象,先用null替代,之后再替换掉,所以null叫空对象,是对象数据类型 
    </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>随机数函数</title>
</head>

<body>
    <script>
        // 左闭右开  能取到0 但是取不到1 中间的一个随机小数
        // console.log(Math.random());

        // 0~10之间的整数
        /*   // console.log(Math.floor(Math.random() * 11));
          let arr = ['red', 'green', 'blue']
          // let random = Math.floor(Math.random() * 3)
          let random = Math.floor(Math.random() * arr.length)
          // console.log(random);    //0, 1, 2
          console.log(arr[random]); */

        // 取到 N ~ M 的随机整数
        function getRandom(N, M) {
            return Math.floor(Math.random() * (M - N + 1)) + N
        }
        console.log(getRandom(4, 9));
    </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>随机点名案例</title>
</head>

<body>
    <script>
        let arr = ['赵云', '黄忠', '关羽', '张飞', '马超', '刘备', '曹操']
        // 1. 得到一个随机数, 作为数组的索引号, 这个随机数是0~6
        let random = parseInt(Math.random() * arr.length)
        // 2. 页面输出数组里面的元素
        document.write(arr[random])

        // 数组元素的删除:shift删除第一个数组元素,pop删除最后一个元素                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    一个数组元素,pop删除最后一个数组元素,
        // 3. splice(起始位置(数组的下标),删除几个元素)
        arr.splice(random, 1)
        console.log(arr);
    </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>猜数字游戏</title>
</head>

<body>
    <script>
        // 1. 随机生成一个数字 1~10
        // 取到 N ~ M 的随机整数
        function getRandom(N, M) {
            return Math.floor(Math.random() * (M - N + 1)) + N
        }
        let random = getRandom(1, 10)
        console.log(random);
        // 需要不断地循环
        while (true) {
            // 2. 用户输入一个值
            let num = +prompt('请输入您猜的数字:')
            // 3. 判断输出
            if (num > random) {
                alert('您猜大了')
            } else if (num < random) {
                alert('您猜小了')
            } else {
                alert('猜对啦, 您真厉害')
                break   //退出循环
            }
        }

        // 可以用二分法去猜数字,第一次猜一半5,提示小了就往5~10去猜
    </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>猜数字游戏设定次数</title>
</head>

<body>
    <script>
        //    1. 随机生成一个数字 1~10
        // 取到 N ~ M 的随机整数
        function getRandom(N, M) {
            return Math.floor(Math.random() * (M - N + 1)) + N
        }
        let random = getRandom(1, 10)
        // 2. 设定三次  三次没猜对就直接退出
        let flag = true   //这个变量我们也称之为开关变量
        for (let i = 1; i <= 3; i++) {
            let num = +prompt('请输入1~10之间的一个数字:')
            if (num > random) {
                alert('您猜大了,继续')
            } else if (num < random) {
                alert('您猜小了,继续')
            } else {
                flag = false
                alert('猜对了,你真厉害')
                break
            }
            // 代码从上往下执行,猜一次就会执行一次这个句子,但是我们想整个i++都执行完了再执行
            /*  if (flag) {
                 alert('次数已经用完')
             } */
        }
        // 但是这样也会有问题,当次数没用完就猜对,也会执行这条语句
        // 写到for的外面来
        if (flag) {
            alert('次数已经用完')
        }
    </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>随机颜色案例</title>
    <style>
        div {
            width: 300px;
            height: 300px;
        }
    </style>
</head>

<body>
    <div></div>
    <script>
        // 1. 自定义一个随机颜色函数
        // function getRandomColor(flag) {
        function getRandomColor(flag = true) {
            // 3. 如果是true 则返回 #ffffff
            if (flag) {
                // 3. 如果是true 则返回 #ffffff
                let str = '#'
                let arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
                // 利用for循环随机抽6次 累加到str里面
                for (let i = 1; i <= 6; i++) {
                    // 每次要随机从数组里面抽取一个
                    // random是数组的索引号 是随机的
                    let random = Math.floor(Math.random() * arr.length)
                    // str = str + arr[random]
                    // push是数组可以往数组里面去追加,这里是字符串
                    str += arr[random]
                }
                return str
            } else {
                // 4. 否则是 false 则返回 rgb(255, 255, 255)
                let r = Math.floor(Math.random() * 256)
                let g = Math.floor(Math.random() * 256)
                let b = Math.floor(Math.random() * 256)
                return `rgb(${r},${g},${b})`
            }
        }
        // 2. 调用函数 getRandomColor(布尔值)
        console.log(getRandomColor(false));
        console.log(getRandomColor(true));
        // 没有参数的情况,默认返回的是rgb格式,但是我们知道16进制是最常用的 所以我们可以考虑flag加true 默认值 当有参数传过来,默认值就不执行,当没有参数传过来,就执行默认值

        const div = document.querySelector('div')
        div.style.backgroundColor = getRandomColor()
    </script>
</body>

</html>
综合案例

在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>学成在线首页</title>
    <link rel="stylesheet" href="./css/style.css">
    <style>

    </style>
</head>

<body>

    <!-- 4. box核心内容区域开始 -->
    <div class="box w">
        <div class="box-hd">
            <h3>精品推荐</h3>
            <a href="#">查看全部</a>
        </div>
        <div class="box-bd">
            <ul class="clearfix">
                <!-- <li>
                    <a href="#">
                        <img src="images/course01.png" alt="">
                        <h4>
                            Think PHP 5.0 博客系统实战项目演练
                        </h4>
                        <div class="info">
                            <span>高级</span> • <span>1125</span>人在学习
                        </div>
                    </a>
                </li> -->
                <!-- 因为script渲染的是小li,所以把script放在ul里面 -->
                <script>
                    // 数组对象
                    let data = [
                        {
                            src: 'images/course01.png',
                            title: 'Think PHP 5.0 博客系统实战项目演练',
                            num: 1125
                        },
                        {
                            src: 'images/course02.png',
                            title: 'Android 网络动态图片加载实战',
                            num: 357
                        },
                        {
                            src: 'images/course03.png',
                            title: 'Angular2 大前端商城实战项目演练',
                            num: 22250
                        },
                        {
                            src: 'images/course04.png',
                            title: 'Android APP 实战项目演练',
                            num: 389
                        },
                        {
                            src: 'images/course05.png',
                            title: 'UGUI 源码深度分析案例',
                            num: 124
                        },
                        {
                            src: 'images/course06.png',
                            title: 'Kami2首页界面切换效果实战演练',
                            num: 432
                        },
                        {
                            src: 'images/course07.png',
                            title: 'UNITY 从入门到精通实战案例',
                            num: 888
                        },
                        {
                            src: 'images/course08.png',
                            title: 'Cocos 深度学习你不会错过的实战',
                            num: 590
                        },
                        // 后台增加了一条数据,会自动渲染
                        {
                            src: 'images/course08.png',
                            title: '自动添加的模块',
                            num: 1590
                        }
                    ]
                    // 数组对象它的本质还是数组
                    /*  data[i]是数组里面的每一个对象 */
                    // 这里不包起来的话,title里面的内容有空格的话,只会显示空格前面的内容!! 外双内单的形式 h4的title没问题是因为它是丢进盒子里面的,而title里面的title是鼠标经过才会出现的
                    for (let i = 0; i < data.length; i++) {
                        document.write(`
                        <li>
                            <a href="#">
                                <img src=${data[i].src} title="${data[i].title}">
                                <h4>
                                    ${data[i].title}
                                </h4>
                                <div class="info">
                                    <span>高级</span> • <span>${data[i].num}</span>人在学习
                                </div>
                            </a>
                        </li>
                        `)
                    }
                </script>
            </ul>
        </div>
    </div>

</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>数据类型存储</title>
</head>

<body>
    <script>
        let num1 = 100
        let num2 = num1
        num2 = 900
        console.log(num1);    //结果是? 100

        let obj1 = {
            age: 18
        }
        let obj2 = obj1
        // 修改属性
        obj2.age = 20
        console.log(obj1.age);   //结果是20
    </script>
</body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值