JavaScript 基础 - 第5天

JavaScript 基础 - 第5天

1 对象

  • 对象是 JavaScript 数据类型的一种,之前已经学习了数值类型、字符串类型、布尔类型、undefined。
  • 对象数据类型可以被理解成是一种数据集合。它由属性和方法两部分构成。
  • 对象是一种无序的数据集合 类似ul 数组是有序的数据集合 类似ol
  • null 是对象类型 表示空对象

1.1 语法

  • let 对象名 = { }
  • 对象有 属性 和方法 组成
  <script>
    // 声明字符串类型变量
    let str = 'hello world!'
    
    // 声明数值类型变量
    let num = 199

    // 声明对象类型变量,使用一对花括号
    // user 便是一个对象了,目前它是一个空对象
    let user = {
      
      }
  </script>

1.2 属性和调用

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

  1. 属性都是成 对出现的,包括属性名和值,它们之间使用英文 : 分隔
  2. 多个属性之间使用英文 , 分隔
  3. 属性就是依附在对象上的变量
  4. 属性名可以使用 ""'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等

使用对象 : 对象名.属性 或者 对象 属性

​ 使用 .[] 获得对象中属性对应的值,我称之为属性访问。

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

增删改查:也可以动态修改属性,动态添加与直接定义是一样的,只是语法上更灵活。

<script>
    // 声明一个空的对象(没有任何属性)
	let user = {
      
      
        name : '小狗',
        hobby:'write bug'
    }
    //修改属性 
    user.name = '小明'
    // 添加属性
    user.age = 18
  //删除属性
    delete  user.hobby
    
    // 动态添加与直接定义是一样的,只是语法上更灵活
  </script>

1.3 方法和调用

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

  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('我跑的非常快...')
      },
      dance:function( x, y){
      
        //含有参数的方法 ,此处是形参
          return x+y 
      }
    }
    person.singing() // 调用对象中 singing 方法
    person.run()// 调用对象中的 run 方法
	person.dance(1,2)  // 调用有参数的方法 此处是实参
  </script>

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

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

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

1.4遍历对象

  • for 遍历的问题:
    • ​ 对象没有长度,length属性没有 长度无法测量
    • ​ 对象是没有规律的,没有下标

for in 推荐遍历对象 (遍历数组的话 结果为字符串)

扫描二维码关注公众号,回复: 14730254 查看本文章
let obj = {
    
    
      uname: 'pink老师',
      age: 18,
      gender: '男',
      hobby:'write bug'
    }

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

//转换逻辑
 for (let k in obj) {
    
    
      console.log(k) // 输出属性名  'uname'   'age'
      console.log(obj.uname)
      console.log(obj.k) //obj 对象里边没有k 这个属性名
      console.log(obj.'uname') 
      console.log(obj['uname'])  //  'uname'  === k    k输出的属性名 是字符串
      console.log(obj[k])  // 输出属性值  obj[k]
     }

1.5 遍历数组对象

<script>
    let students = [
      {
    
     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 < students.length; i++) {
    
    
      // console.log(i)  // 下标索引号
      // console.log(students[i]) // 每个对象
      console.log(students[i].name) // 对象.属性名
      console.log(students[i].hometown)
    }
  </script>

2 内置对象

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

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

2.1Math

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

属性

  • Math.PI,获取圆周率
// 圆周率
console.log(Math.PI);

方法

  • Math.random,生成 0 到 1 间的随机数
// 0 ~ 1 之间的随机数, 包含 0 不包含 1   左闭右开
Math.random()  //默认值  0--1
Math.floor(Math.random()* (M-N+1))+N   // N-M 的随机数   大范围到小范围
  • Math.ceil,数字向上取整
// 舍弃小数部分,整数部分加1
Math.ceil(3.4)
  • Math.floor,数字向下取整
// 舍弃小数部分,整数部分不变
Math.floor(4.68)
  • Math.round,四舍五入取整
// 取整,四舍五入原则
Math.round(5.46539)
Math.round(4.849)
  • Math.max,在一组数中找出最大的
// 找出最大值
Math.max(10, 21, 7, 24, 13)
  • Math.min,在一组数中找出最小的
// 找出最小值
Math.min(24, 18, 6, 19, 21)
  • Math.pow,幂方法
// 求某个数的多少次方
Math.pow(4, 2) // 求 4 的 2 次方
Math.pow(2, 3) // 求 2 的 3 次方
  • Math.sqrt,平方根
// 求某数的平方根
Math.sqrt(16)

综合案例

1 渲染学生表格

<script>
            // 1. 数据准备
            let students = [
                { name: '小明', age: 18, gender: '男', hometown: '河北省' },
                { name: '小红', age: 19, gender: '女', hometown: '河南省' },
            ]
            // 2. 渲染页面
            for(let i = 1;i<= students.length ;i++ ){

                document.write(`
                <tr>
                    <td>${i}</td>
                    <td>${students[i].name}</td>
                    <td>${students[i].age}</td>
                    <td>${students[i].gender}</td>
                    <td>${students[i].hometown}</td>  
                </tr>
            `)
            }
        </script>

2 随机点名

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

    // 3. splice(起始位置(下标), 删除几个元素)
    arr.splice(random, 1)
    console.log(arr)
  </script>

3猜数字游戏

<script>//重点,内置结束开关
        function palyNum (n ,m ){
            return Math.floor(Math.random()*(m-n+1))+n
        }
      let random =  palyNum(3,9)
        console.log(random);
      //技术开关
      let falg = true
      for(let i =0 ;i<3;i++){
            let num = +prompt('请输入要猜的数字大小')
            if( num > random){
                alert('猜大了')
            }
            else if( num < random){
                alert('猜小了')
            }
           else{
                falg= false
                alert('猜对了')
                break
            }
        }

        if(falg){
            alert('次数已经完了,游戏结束')
        }

    </script>

4随即变色div

 <script>
        // 随机数函数声明
            function RandomNum (){
                return Math.floor(Math.random()*256)
            }
            console.log( RandomNum() );

        // 1颜色声明函数       
        function getColor(flat= true){
            //
            if(flat){
                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=str+arr[random];
                }
                console.log(' true 或者无参  16进制颜色');
                return str
                
            }
            // false 输出rgb颜色
            else{
                let r = RandomNum()
                let g = RandomNum()
                let b = RandomNum()
                console.log('false 输出rgb颜色');
                return (`rgb(${r},${g},${b})`)
            }
        }
        // 2 调用函数
    //    let color = getColor(flat)
    //    console.log(color);
  
       const divcolor = document.querySelector('div')
       divcolor.style.backgroundColor = getColor(false)
    </script>

JS基础总结

数据类型

简单数据类型: 存在的是值本省 放在栈里边
值类型:string number Boolean undefined null
综合数据类型 :存放的地址 放在堆里边
object array data
先将地址存放在栈里边 ,将具体的值 放在堆里边

猜你喜欢

转载自blog.csdn.net/weixin_62643012/article/details/129972590