js——对象篇

js——对象篇在对象里面称为属性 在对象外面称为变量遍历对象 person k js 撖寡情

大家好,欢迎来到IT知识分享网。

数组与对象

在js中对象就是一组无序的键值对的集合 对象由属性和方法组成

  • 键值对就是冒号左边的内容称为属性,右边的内容称为值,故称为键值对
  • 当右边的值为函数时,称为方法,方法相当于函数
  • 是一种数据类型 所以在定义时,使用let
  • 集合用{} 称为对象字面量

案例一:对象属性和方法的定义

在对象里面称为属性,在对象外面称为变量

 <script> let singer = { 
    uname: '唐嫣', ageage: 18, song: function (x, y) { 
    console.log(x + y) } } singer.song(1, 5) </script> 
 <script> let students = { 
    uname: 'andy', age: 18, gender: '女' } // 1.增 students.hobby = '唱歌' console.log(students) // 2.删除 delete students.uname console.log(students) // 3.改 students.age = 20 console.log(students) // 4.查 console.log(students.gender) console.log(students['gender']); </script> 

方法 对象名.方法名 方法相当于函数,所以自然涉及到参数 在起名字的时候,一般不会嘉善引号,但是当遇到空格或者短横线,会加上引号

 <script> let singer = { 
    uname: '唐嫣', 'uname-gender': '女' } console.log(singer); </script> 

遍历对象

使用for…in…循环,不适宜数组,因为遍历出的是字符串下标,不是数字下标 数组应该使用arr2的形式
可知k是字符串下标,更适合对象的遍历,因为对象的k相当于属性名,属性名就是字符串形式


死记硬背原理:

 <script> let arr = [43, 6, 8, 54, 43] for (let k in arr) { 
    // 在数组中,k表示数组下标 console.log(k) // 并且是字符串形式 console.log(typeof k) console.log(arr[k]) } let arr2 = [4, 56, 5, ] for (let i = 0; i < arr2.length; i++) { 
    console.log(arr2[i]) } </script> 

遍历对象代码:

 <script> let person = { 
    uname: 'andy', age: 25, gender: '女' } for (let k in person) { 
    //当我们使用点表示法(.)来访问对象属性时,如 person.k,JavaScript 实际上是在查找一个名为 k 的属性,而不是 k 变量所持有的那个字符串作为属性名。这就是为什么 console.log(person.k) 不会按照预期工作,除非 person 对象真的有一个名为 k 的属性。 // console.log(person.k) // k得出的是字符串形式的属性,相当于是加了引号的字符串,所以需要使用查的第二种方式 console.log(person[k]) } </script> 

渲染学生信息表格案例

 <style> table { 
    width: 700px; text-align: center; } caption { 
    font-size: 18px; font-weight: 700; margin-bottom: 15px; } table, th, td { 
    border: 1px solid #ccc; border-collapse: collapse; } tr { 
    height: 40px; } </style> 
 <h2>学生信息</h2> <p>将数据渲染到页面中</p> <table> <caption>学生列表</caption> <tr> <th>序号</th> <th>学生</th> <th>年龄</th> <th>性别</th> <th>家乡</th> </tr> 
<script> let students = [ { 
    uname: 'andy', age: 18, gender: '女', hometown: '山东省' }, { 
    uname: 'mike', age: 19, gender: '男', hometown: '河南省' }, { 
    uname: 'andy', age: 18, gender: '女', hometown: '河北省' }, { 
    uname: 'amy', age: 19, gender: '男', hometown: '山西省' } ] for (let i = 0; i < students.length; i++) { 
    document.write( `<tr> <td>${ 
     i + 1}</td> <td>${ 
     students[i].uname}</td> <td>${ 
     students[i].age}</td> <td>${ 
     students[i].gender}</td> <td>${ 
     students[i].hometown}</td> </tr> `) } </script> 

内置对象

直接封装好的对象,包括属性和方法,直接使用

问题:什么时候使用Math.floor和Math.random嵌套使用?在需要求范围的时候 Math.floor()本身是向下取整

<script> console.log(Math.PI) console.log(Math.max(43, 56, 657, 432, 321)) console.log(Math.min(45, 65, 5677, 6534, 2)) console.log(Math.random()) console.log(Math.ceil(5.3)) console.log(Math.floor(7.8)) console.log(Math.pow(5, 2)) console.log(Math.abs(-6)) // 0-10 console.log(Math.floor(Math.random() * 11)) // N-M 5-10 Math.floor(Math.random()*(M-N+1))+N console.log(Math.floor(Math.random() * (10 - 5 + 1)) + 5); </script> 
<script> let arr = ['赵云', '黄忠', '关羽', '张飞', '马超', '刘备', '曹操'] console.log(arr[Math.floor(Math.random() * arr.length)]); // N-M 5-10 Math.floor(Math.random()*(M-N+1))+N console.log(Math.floor(Math.random() * (10 - 5 + 1)) + 5); </script> 

随机数字小游戏小案例

 <script> // 1.准备一个随机的数字1-10 let random = Math.floor(Math.random() * 10) + 1 flag = true // console.log(random); // 2.用户输入一个数字 // 4.限定输入次数 for (let i = 1; i <= 3; i++) { 
    let num = +prompt("请输入一个数字:") // 3.语句判断 if (num > random) { 
    alert('您输入大了') } else if (num < random) { 
    alert('您输入小了') } else { 
    // 7.这是为了避免在次数还没用完,执行完for循环还需要执行下面的if语句 flag = false // 5.满足条件 break终止条件 alert('正确') break } } // 6.显示次数用完了 if (flag) { 
    alert('您的次数用完了') } </script> 

渲染案例——改变的是数据,不改变的是结构(完整案例资料见链接)

注意点:准备好数据;for循环要卸载document.write外面;使用模板字符串

 <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/course01.png', title: '自动间的', num:  } ] 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>1${ 
     data[i].num}</span>人在学习 </div> </a> </li> `) } </script> 

简单数据类型和复杂数据类型的综合比较:简单数据类型num会在栈中开辟一个空间用来存放10;复杂数据类型obj会在堆中开辟一个空间用来存放对象,在栈中开辟一个空间用来存放对象在堆中的地址

在这里插入图片描述

<script> let num1 = 10 let num2 = num1 num2 = 20 console.log(num1); </script> 

在这里插入图片描述

复杂数据类型案例:

 <script> let obj1 = { 
    age: 18 } let obj2 = obj1 obj2.age = 20 console.log(obj1.age); </script> 

在这里插入图片描述
总结:在栈中,简单数据类型存储的是值,复杂数据类型存储的是地址,最后的结果存储在堆中

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114640.html

(0)
上一篇 2025-12-07 18:15
下一篇 2025-12-07 18:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信