轻松玩转JavaScript基础05

248 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

本章内容

1.对象

2.内置对象

3.猜数字游戏

4.随机颜色案例

对象

语法

声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。

 <script>
    let goods = {
      name: '麻痹戒指',
      num: '8888888',
      weight: '0',
      address: '传奇商店',
      'user-zhekou': '9折',
    }
    //改
    goods.name = '麻痹戒指(new)'
    //增
    goods.color = '银色'
    //删
    delete goods.weight
    //查
    console.log(goods)
    console.log(goods.color)
    console.log(goods['user-zhekou'])
  </script>

属性和访问

数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的。

  1. 属性都是成 对出现的,包括属性名和值,它们之间使用英文 : 分隔
  2. 多个属性之间使用英文 , 分隔
  3. 属性就是依附在对象上的变量
  4. 属性名可以使用 ""'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
 <script>
    // 通过对象描述一个人的数据信息
    // person 是一个对象,它包含了一个属性 name
    // 属性都是成对出现的,属性名 和 值,它们之间使用英文 : 分隔
    let person = {
      name: '小明', // 描述人的姓名
      age: 18, // 描述人的年龄
      stature: 185, // 描述人的身高
      gender: '男', // 描述人的性别
    }

声明对象,并添加了若干属性后,可以使用 .[] 获得对象中属性对应的值,我称之为属性访问。

 <script>
    // 通过对象描述一个人的数据信息
    // person 是一个对象,它包含了一个属性 name
    // 属性都是成对出现的,属性名 和 值,它们之间使用英文 : 分隔
    let person = {
      name: '小明', // 描述人的姓名
      age: 18, // 描述人的年龄
      stature: 185, // 描述人的身高
      gender: '男', // 描述人的性别
    };
    
    // 访问人的名字
    console.log(person.name) // 结果为 小明
    // 访问人性别
    console.log(person.gender) // 结果为 男
    // 访问人的身高
    console.log(person['stature']) // 结果为 185
   // 或者
    console.log(person.stature) // 结果同为 185
  </script>

扩展:也可以动态为对象添加属性,动态添加与直接定义是一样的,只是语法上更灵活。

 <script>
    // 声明一个空的对象(没有任何属性)
	let user = {}
    // 动态追加属性
    user.name = '小明'
    user['age'] = 18
    
    // 动态添加与直接定义是一样的,只是语法上更灵活
  </script>

方法和调用

数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数。

  1. 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
  2. 多个属性之间使用英文 , 分隔
  3. 方法是依附在对象中的函数
  4. 方法名可以使用 ""'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
 <script>
    // 方法是依附在对象上的函数
    let person = {
      name: '小红',
      age: 18,
      // 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
      singing: function () {
        console.log('两只老虎,两只老虎,跑的快,跑的快...')
      },
      run: function () {
        console.log('我跑的非常快...')
      }
    }
  </script>

声明对象,并添加了若干方法后,可以使用 .[] 调用对象中函数,我称之为方法调用。

<script>
    // 方法是依附在对象上的函数
    let person = {
      name: '小红',
      age: 18,
      // 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
      singing: function () {
        console.log('两只老虎,两只老虎,跑的快,跑的快...')
      },
      run: function () {
        console.log('我跑的非常快...')
      }
    }
    
    // 调用对象中 singing 方法
    person.singing()
    // 调用对象中的 run 方法
    person.run()

  </script>

扩展:也可以动态为对象添加方法,动态添加与直接定义是一样的,只是语法上更灵活。

 <script>
    // 声明一个空的对象(没有任何属性,也没有任何方法)
	let user = {}
    // 动态追加属性
    user.name = '小明'
    user.['age'] = 18
    
    // 动态添加方法
    user.move = function () {
      console.log('移动一点距离...')
    }
    
  </script>

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

null

null 也是 JavaScript 中数据类型的一种,通常只用它来表示不存在的对象。使用 typeof 检测类型它的类型时,结果为 object

遍历对象

let obj = {
    uname: 'pink'
}
for(let k in obj) {
    // k 属性名  字符串  带引号    obj.'uname'     k ===  'uname'
    // obj[k]  属性值    obj['uname']   obj[k]
}

如:

<script>
    let obj = {
      name: '李富贵',
      age: '25',
      sex: '猛男'
    }
    for (let k in obj) {
      console.log(k)//获取属性名
      console.log(obj[k])//获取属性值
    }
  </script>

遍历数组对象

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

    for (let i = 0; i < arr.length; i++) {
      console.log(arr[i].name)
      console.log(arr[i].hometown)
    }
  </script>

学生信息表案例

css

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

html+js


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

  <table>
    <caption>学生列表</caption>
    <tr>
      <th>序号</th>
      <th>姓名</th>
      <th>年龄</th>
      <th>性别</th>
      <th>家乡</th>
    </tr>

    <script>
      let arr = [{
        name: '小明',
        age: 18,
        gender: '男',
        hometown: '河北省'
      },
      {
        name: '小红',
        age: 19,
        gender: '女',
        hometown: '河南省'
      },
      {
        name: '小刚',
        age: 17,
        gender: '男',
        hometown: '山西省'
      },
      {
        name: '小丽',
        age: 18,
        gender: '女',
        hometown: '山东省'
      }
      ]
      for (let i = 0; i < arr.length; i++) {
        document.write(`
       <tr>
            <td>${i + 1}</td>
            <td>${arr[i].name}</td>
            <td>${arr[i].age}</td>
            <td>${arr[i].gender}</td>
            <td>${arr[i].hometown}</td>
          </tr>
      `
        )
      }

    </script>
  </table>

内置对象

回想一下我们曾经使用过的 console.logconsole其实就是 JavaScript 中内置的对象,该对象中存在一个方法叫 log,然后调用 log 这个方法,即 console.log()

除了 console 对象外,JavaScritp 还有其它的内置的对象

Math

Math 是 JavaScript 中内置的对象,称为数学对象,这个对象下即包含了属性,也包含了许多的方法。

属性及方法

<script>
    //Math属性
    console.log(Math.PI)
    //ceil()  向上取整
    console.log(Math.ceil(1.1))//2
    //floor()  向下取整
    console.log(Math.floor(1.9))//1
    //round()  四舍五入
    console.log(Math.round(1.9))//2
    console.log(Math.round(1.1))//1
    //max()   数组中的最大值
    console.log(Math.max(1, 2, 3, 4, 5, 6, 7, 8, 9))//9
    //min()   数组中的最小值
    console.log(Math.max(1, 2, 3, 4, 5, 6, 7, 8, 9))//1
    //abs()   绝对值
    console.log(Math.abs(-1))//1
    //sqrt()   平方根
    console.log(Math.sqrt(16))//4
    //pow()    幂方
    console.log(Math.pow(2, 3))//8
    console.log(Math.pow(4, 2))//16
  </script>

随机函数

 <script>
    //[0,1)小数
    console.log(Math.random())
    //0-10整数
    console.log(Math.floor(Math.random() * 10))
    //随机获取数组中的元素
    let arr = [1, 2, 3, 4]
    let random = Math.floor(Math.random() * arr.length)
    console.log(arr[random])
    //生成m-n的随机数
    function getRandom(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min
    }
    console.log(getRandom(1, 10))
  </script>

抽奖案例

 <script>
    let arr = ['特等奖', '一等奖', '二等奖', '三等奖', '谢谢参与']
    let random = Math.floor(Math.random() * arr.length)
    alert(arr[random])
  </script>

点名案例

 <script>
    let arr = ['张三', '李四', '王老五', '盖老八']
    let random = Math.floor(Math.random() * arr.length)
    alert(arr[random])
    arr.splice(random, 1)
    console.log(arr)
  </script>

猜数字游戏

<script>
    //随机生成1-10的数字
    function getRandom(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min
    }
    let random = getRandom(1, 100)
    console.log(random)
    while (true) {
      let num = +prompt('请猜一个1-100的数字')
      if (num > random) {
        alert('你猜大了')
      } else if (num < random) {
        alert('你猜小了')
      } else {
        alert('你猜对了, 真🐂🍺')
        break;
      }
    }
  </script>

随机颜色案例

<script>
    function getRandomColor(flag = true) {
      if (flag) {
        let str = '#'
        let arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
        for (let i = 0; i < 6; i++) {
          let random = Math.floor(Math.random() * arr.length)
          str += arr[random]
        }
        return str
      } else {
        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})`
      }
    }
    0
    console.log(getRandomColor(true))
    console.log(getRandomColor(false))
    console.log(getRandomColor())
  </script>

最后是原图(●'◡'●)

wallhaven-g71pve (1).jpg