js第n+4天

108 阅读3分钟

js第n+4天

对象

什么是对象

保存网站用户信息,比如姓名,年龄,电话号码… 用以前学的数据类型方便吗?不方便,很难区分

我们需要学习一种新的数据类型,可以详细的描述某个事物

对象(object):JavaScript里的一种数据类型,可以理解为是一种无序的数据集合

语法:let 对象名 = {}

    <script>
        let person = {}
    </script>

对象有属性和方法组成

属性:信息或叫特征(名词)。 比如 手机尺寸、颜色、重量等… 方法:功能或叫行为(动词)。 比如 手机打电话、发短信、玩游戏…

    <script>
        let person = {
            属性名:属性值,
            方法名:函数
        }
    </script>
    <script>
        //对象属性没有顺序,属性和值是用冒号隔开,多个属性用逗号隔开
        let person = {
            uname:'andy',
            sex:'男',
            age:18
        }
    </script>

对象中属性

两种方式进行属性访问

    <script>
        let person = {
            uname:'andy',
            sex:'男',
            age:18
        }
        console.log(person.uname)
        console.log(person.sex)
        console.log(person['age'])
    </script>

对象中方法

    <script>
        let person = {
            uname:'andy',
            //方法是由方法名和匿名函数组成,由冒号分隔
            sayHi:function(){
                document.write('hi')
            }
        }
    </script>

方法访问

    <script>
        let person = {
            uname:'andy',
            //方法是由方法名和匿名函数组成
            sayHi:function(){
                document.write('hi')
            }
        }
        //对象名+.+方法名+()
        person.sayHi()
    </script>

操作对象

查询对象:就是查询对象的属性和方法

增加新数据:添加新的属性名

    <script>
        let person = {
            uname:'andy',
            age:18
        }
        person.hobby = '足球'
        person['sex'] = '男'
        console.log(person)
    </script>

重新赋值:对已有的属性进行修改

    <script>
        let person = {
            uname:'andy',
            sex:'女',
            age:18
        }
        person.uname = 'sondy'
        person.age = '22'
        person.sex = '男'
        console.log(person)
    </script>

删除属性:delete加属性名就能删除

    <script>
        let person = {
            uname:'andy',
            sex:'女',
            age:18
        }
        delete person.uname
        delete person.age 
        delete person.sex 
        console.log(person)
    </script>

新增方法

对象名+.+方法名+()

无论是属性或是方法,同一个对象中出现名称一样的,后面的会覆盖前面的。

    <script>
        let person = {
            uname:'andy',
            sayHi:function(){
                document.write('hi')
            }
        }
        person.move = function(){
            document.write('移动一点')
        }
        person.sayHi()
        person.move()
    </script>

遍历对象

能够遍历输出对象里面的元素 对象没有像数组一样的length属性,所以无法确定长度 对象里面是无序的键值对, 没有规律. 不像数组里面有规律的下标

for in 语法

for in语法一般用来遍历对象

    <script>
        let person = {
            uname:'andy',
            sex:'男',
            age:18
        }
        //key获得对象的属性名,person对应的是对象名
        for (let key in person) {
            console.log(key) //输出key为属性的名称
            console.log(person[key])//输出person[key]为属性的值
        }
    </script>

案例1

请把下面数据中的对象打印出来


    <script>
        let students = [
            {
                name: '小明', age: 18, gender: '男', hometown: '河北省'
            },
            {
                name: '小红', age: 19, gender: '女', hometown: '河南省'
            },
            {
                name: '小刚', age: 17, gender: '男', hometown: '山西省'
            },
            {
                name: '小丽', age: 18, gender: '女', hometown: '山东省'
            }
        ]

        let content = `<table>
    <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>地址</th>
    </tr>`
        //一排上,序号+对象里面的所有属性,形成一行,循环四次。
        for (let index = 0; index < students.length; index++) {
            content += `<tr><td>${index + 1}</td>`
            for (let key in students[index]) {
                let num = students[index]
                content += `<td> ${num[key]} </td>`

            }
            content +=`</tr>`
        }
        content += `</table>`                                                                            
        document.write(content)
    </script>

内置对象

JavaScript内部提供的对象,包含各种属性和方法给开发者调用

之前使用过的有 document.write() console.log()

内置对象Math
    <script>
        //随机数0~1,包含0,不包含1
        Math.random
        //四舍五入
        Math.round
        //向上取整
        Math.ceil(0.3)
        console.log(Math.ceil(1.3))
        //向下取整
        Math.floor(0.4)
        console.log(Math.floor(1.4))
        //求最大值
        console.log(Math.max(1, 2, 45, 6, 3, 6))
        //求最小值
        console.log(Math.min(2, 4, 1, 4, 5, 6, 32))
        //幂运算,平方,立方
        //第一个2是值,第2个3是乘的次数
        Math.pow(2, 3)//2*2*2
        console.log(Math.pow(2,3))
        //绝对值 -1=1,-3=3
        console.log(Math.abs(-12))
    </script>

案例2

如何生成0-10的随机数呢?

    <script>
        //先取整,再取0~1的随机数*10
        Math.round(Math.random()*10)
        console.log(Math.round(Math.random()*10))
    </script>

推导公式

    <script>
        //求一个数与另一个数的随机数
        function getRandom(min,max) {
            console.log(Math.round(Math.random()*(max - min)+min))
        }
        getRandom(3,10)
    </script>

案例3

需求:请把 [‘赵云’, ‘黄忠’, ‘关羽’, ‘张飞’, ‘马超’, ‘刘备’, ‘曹操’] 随机显示一个名字到页面中

    <script>
    let name = ['张飞', '曹操', '黄盖', '周瑜', '吕布', '赵云']
    //0到5的随机数
    function getRandom(min,max) {
            return(Math.round(Math.random()*(max - min)+min))
        }
    let num = getRandom(0,name.length - 1)//0到5
    console.log(name[num])   
    </script>

案例4

需求:请把 [‘赵云’, ‘黄忠’, ‘关羽’, ‘张飞’, ‘马超’, ‘刘备’, ‘曹操’] 随机显示一个名字到页面中,但是不允许重复显示

      <script>
        let name = ['张飞', '曹操', '黄盖', '周瑜', '吕布', '赵云']
        //0到5的随机数
        function getRandom(min, max) {
            return(Math.round(Math.random() * (max - min) + min))
        }
    
        while (name.length > 0) {
            //随机选出0到5的一个数字
            let num = getRandom(0, name.length - 1)
            //输出随机数字的数组下标
            console.log(name[num])
            //删除出现的数组下标
            name.splice(num,1)
        }
    </script>

案例5

需求:程序随机生成 1~10 之间的一个数字,用户输入一个数字

如果大于该数字,就提示,数字猜大了,继续猜 如果小于该数字,就提示,数字猜小了,继续猜 如果猜对了,就提示猜对了,程序结束

    <script>
        let num = Math.round(Math.random() * 9 + 1)
        while (true) {
            let num1 = +prompt('猜数字')
            if (num1 > num) {
                alert('猜大了')
            }else if(num1 < num){
                alert('猜小了')
            }else{
                alert('猜对了')
                break
            }
        }

    </script>

数据类型

简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。

值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型 string ,number,boolean,undefined,null

引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型 通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等

基本数据类型

栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;简单数据类型存放到栈里面

引用数据类型

堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收;引用数据类型存放到堆里面