JavaScript基础—对象、内置对象、Math、案例分析—随机点名、猜数字游戏、生成随机颜色、网页页面渲染、堆栈

版本说明

当前版本号[20231201]。

版本修改说明
20231201初版

目录

文章目录

  • 版本说明
  • 目录
  • JavaScript 基础 - 第5天
    • 对象
      • 语法
      • 属性和访问
      • 方法和调用
      • null
        • 遍历对象
    • 内置对象
      • Math
        • 属性
        • 方法
      • 案例分析
        • 案例一 随机点名
        • 案例二 随机点名改进
        • 案例三 猜数字游戏
        • 案例四 生成随机颜色
        • 案例五 学成在线页面渲染
      • 扩展
      • 基本数据类型和引用数据类型
      • 堆栈
      • 简单类型的内存分配
      • 复杂类型的内存分配

JavaScript 基础 - 第5天

知道对象数据类型的特征,能够利用数组对象渲染页面

  • 理解什么是对象,掌握定义对象的语法
  • 掌握数学对象的使用

对象

对象是 JavaScript 数据类型的一种,之前已经学习了数值类型、字符串类型、布尔类型、undefined。对象数据类型可以被理解成是一种数据集合。它由属性和方法两部分构成。

可以理解为是一种无序的数据集合, 注意数组是有序的数据集合

用来描述某个事物,例如描述一个人

  • 人有姓名、年龄、性别等信息、还有吃饭睡觉打代码等功能
  • 如果用多个变量保存则比较散,用对象比较统一

比如描述 班主任 信息:

  • 静态特征 (姓名, 年龄, 身高, 性别, 爱好) => 可以使用数字, 字符串, 数组, 布尔类型等表示
  • 动态行为 (点名, 唱, 跳, rap) => 使用函数表示

语法

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

image-20231127201153135

示例:如何声明对象。

<script>// 声明字符串类型变量let str = 'hello world!'// 声明数值类型变量let num = 199// 声明对象类型变量,使用一对花括号// user 便是一个对象了,目前它是一个空对象let user = {}</script>

属性和访问

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

image-20231127201455650

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

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

<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>
</body>
</html>

扩展:也可以动态为对象添加或者修改属性,动态添加与直接定义是一样的,只是语法上更灵活。【如果原来有属性,就是修改;如果原来没有属性,那就是新增】

<script>let user = {name: '小明', // 描述人的姓名age: 18, // 描述人的年龄stature: 185, // 描述人的身高gender: '男', // 描述人的性别};// 动态追加属性user.name = '小花'user['age'] = 18// 动态添加与直接定义是一样的,只是语法上更灵活</script>
</body>
</html>

案例一:修改产品对象的名称

image-20231127203023816

参考代码:

<script>let goods = {name : '华为Mate 60 Pro',num : '8999',weight : '45kg',address : '上海'}</script>

2、中间加上跳转到下一行。

  <script>let goods = {name : '华为Mate 60 Pro',num : '8999',weight : '45kg',address : '上海'}goods.name = '小米 10 PLUS'goods.color = '粉色'document.write(goods.name)document.write('<br>')document.write(goods.num)document.write('<br>')document.write(goods.weight)document.write('<br>')document.write(goods.address)document.write('<br>')document.write(goods.color)</script>

image-20231127203508019

方法和调用

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

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

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

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基础 - 对象方法</title>
</head>
<body><script>// 方法是依附在对象上的函数let person = {name: '小红',age: 18,// 方法是由方法名和函数两部分构成,它们之间使用 : 分隔singing: function () {console.log('两只老虎,两只老虎,跑的快,跑的快...')},run: function () {console.log('我跑的非常快...')}}// 调用对象中 singing 方法person.singing()// 调用对象中的 run 方法person.run()</script>
</body>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基础 - 对象方法</title>
</head>
<body><script>// 声明一个空的对象(没有任何属性,也没有任何方法)let user = {}// 动态追加属性user.name = '小明'user.['age'] = 18// 动态添加方法user.move = function () {console.log('移动一点距离...')}</script>
</body>
</html>

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

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

for in 不提倡遍历数组 因为 k 是 字符串

案例一:将学生信息打印出来

image-20231127235659271

参考代码:

 <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])}</script>

在控制台的输出结果:

image-20231127235128434

通过循环,将学生的各个信息进行输出:

for(let i = 0; i < students.length ; i++){console.log(students[i].name)console.log(students[i].age)console.log(students[i].gender)console.log(students[i].hometown)}

输出结果如下:

image-20231127235354826

案例二:以表格的形式输出学生信息

image-20231127235632831

分析如下:

image-20231128000647702

1、举一层循环为例,接下来就把学生信息相对应的地址信息填入。

<table><caption>学生列表</caption><tr><th>序号</th><th>姓名</th><th>年龄</th><th>性别</th><th>家乡</th></tr><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++){document.write(`<tr><td>1</td><td>小明</td><td>18</td><td>男</td><td>河北省</td></tr>`)}</script></tr></table>

image-20231128001121056

2、用于遍历一个名为"students"的数组,通过索引i获取当前学生的信息并将其以表格的形式输出到HTML文档中,使用**模板字符串(template string)**将学生信息插入到HTML表格的行中。

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>`)}

image-20231128001444030

内置对象

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

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

Math

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

属性
  • Math.PI,获取圆周率
// 圆周率
console.log(Math.PI);
方法
  • Math.random,生成 0 到 1 间的随机数
// 0 ~ 1 之间的随机数, 包含 0 不包含 1
Math.random()
console.log(Math.random())// 取 0 - 10 之间的整数(当写到11后,就可以包含0包含10)console.log(Math.floor(Math.random()*11))// 取 5 - 10 之间的整数console.log(Math.floor(Math.random()*6)+5)//如何生成N-M之间的随机数Math.floor(Math.random() * (M - N + 1)) + N
  • 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)

数学对象提供了比较多的方法,这里不要求强记,通过演示数学对象的使用,加深对对象的理解。

案例分析

案例一 随机点名

image-20231128092828011

参考代码:

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

image-20231128092946137

案例二 随机点名改进

image-20231128092958999

使用splice()方法从数组arr中删除索引为arr1的元素:

<script>let arr = [`赵云`,`黄忠`,`关羽`,`张飞`,`马超`,`刘备`,`曹操`]// 得到一个随机数,作为数组的索引号,这个随机数为0-6let arr1 = Math.floor(Math.random()*arr.length)// splice(起始位置(下标),删除几个元素)arr.splice(arr1 , 1)// 页面输出数组里面的元素document.write(arr[arr1])console.log(arr)</script>
案例三 猜数字游戏

image-20231128095150818

分析如下:

image-20231128095816984

1、首先先创建一个函数,用于生成一个在NM之间(包括NM)的随机整数

// 得到一个随机数,作为数组的索引号,这个随机数为1-10function getRandom(N, M){return Math.floor(Math.random() * (M - N + 1)) + N}let random = getRandom(1 , 10)

2、参考代码:

<script>// 得到一个随机数,作为数组的索引号,这个随机数为1-10function getRandom(N, M){return Math.floor(Math.random() * (M - N + 1)) + N}let random = getRandom(1 , 10)while(true){let num1 = +prompt('请输入你所猜的数字:')if(num1 > random){alert('猜大了')}else if(num1 < random){alert('猜小了')}else{alert('猜对了')break}}document.write(random)</script>

输出结果:

image-20231128095730507

image-20231128095746940

案例四 生成随机颜色

image-20231128103122045

分析如下:

image-20231128103320869

1、初步生成,首先先写 rgb(255.255.255) 的样式。

<script>// 自定义一个随机颜色函数function getRandomColor(flag){// 如果是true,则返回#ffffffif(flag){}// 否则是false,返回rgb(255.255.255)else{return `rgb(255.255.255)`}}// 调用函数 getRandomColor(布尔值)console.log(getRandomColor(false))</script>

2、对 rgb(255.255.255) 中的三个数字进行随机选择。

 // 否则是false,返回rgb(255.255.255)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})`}

image-20231128104604175

3、对16进制颜色 #ffffff 里的六位数进行随机选择。

 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 = 1 ; i <= 6; i++){let random = Math.floor(Math.random() * arr.length)str += arr[random]}return str}

image-20231128105755889

案例五 学成在线页面渲染

image-20231128112241656

分析如下:

image-20231128112256897

参考代码:

<!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"><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},]for(let i = 0; i < data.length; i++){document.write(`<li><a href="#"><img src="${data[i].src}" alt=""><h4>${data[i].title}</h4><div class="info"><span>高级</span> • <span>${data[i].num}</span>人在学习</div></a></li>`)}</script></ul></div></div></body></html>

输出结果:

image-20231128112153591

扩展

image-20231128112809775

基本数据类型和引用数据类型

目标:了解基本数据类型和引用数据类型的存储方式

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

  • 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型 string ,number,boolean,undefined,null
  • 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型 通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等

堆栈

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

简单数据类型存放到栈里面

2、堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。

引用数据类型存放到堆里面

image-20231128113235122

简单类型的内存分配

值类型(简单数据类型): string ,number,boolean,undefined,null

值类型变量的数据直接存放在变量(栈空间)中

image-20231128113017364

复杂类型的内存分配

引用类型(复杂数据类型):通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等

引用类型变量(栈空间)里存放的是地址,真正的对象实例存放在堆空间中

image-20231128113350189

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/238318.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商店铺搬家API接口,轻松搬运淘宝1688京东拼多多等平台全站商品丨商品详情业数据接口丨搜索商品列表数据接口

轻松搬运淘宝、1688、京东、拼多多等平台全站商品的API接口通常是由各平台提供的官方开发工具或第三方工具提供的。 对于淘宝和1688平台&#xff0c;可以使用淘宝开放平台&#xff08;Open Platform&#xff09;提供的API接口来访问和操作商品信息。淘宝开放平台提供了丰富的A…

android上架之获取平台公钥、签名 MD5 值

app上架需要用到的两个参数公钥、签名 MD5 步骤 1. 下载jadx-gui 工具&#xff0c;下载 2. 下载成后&#xff0c;解压压缩包&#xff0c;双击 jadx-gui-1.4.7.exe 运行。 3. 运行后&#xff0c;在页面左上方单击文件 > 打开文件&#xff0c;打开 APK 包 4. 打开 APK 包后…

linux(3)之buildroot配置软件包

Linux(3)之buildroot配置软件包 Author&#xff1a;Onceday Date&#xff1a;2023年11月30日 漫漫长路&#xff0c;才刚刚开始… 参考文档&#xff1a; Buildroot - Making Embedded Linux Easymdev.txt docs - busybox - BusyBox: The Swiss Army Knife of Embedded Linu…

户外电力检测设备,如何实现远程数据实时互通?

北京某企业专注于电力设备的局部放电检测与监测技术的研究与实践应用&#xff0c;可提供局部放电开关柜检测、高频局部放电发电机检测、电力设备绝缘检测等方案。 在实际项目实施过程&#xff0c;企业工作人员需要在各地电力设施部署放电监测设备并进行检测。由于经常涉及户外的…

牛客算法题 【HJ97 记负均正】 golang实现

题目 HJ97 记负均正 描述 首先输入要输入的整数个数n&#xff0c;然后输入n个整数。输出为n个整数中负数的个数&#xff0c;和所有正整数的平均值&#xff0c;结果保留一位小数。 0即不是正整数&#xff0c;也不是负数&#xff0c;不计入计算。如果没有正数&#xff0c;则平均…

RT-DETR算法优化改进:SENet v2,Squeeze-Excitation模块融合Dense Layer,效果秒杀SENet

💡💡💡本文自研创新改进:SENet v2,针对SENet主要优化点,提出新颖的多分支Dense Layer,并与Squeeze-Excitation网络模块高效融合,融合增强了网络捕获通道模式和全局知识的能力 推荐指数:五星 SENet v2如何在RT-DETR中使用:1)作为注意力机制直接使用;2)RepC3结合…

基于Android平台的APN加载流程分析

基于Android平台的APN加载流程分析 1. APN介绍1.1 APN包含参数 1.2 APN类型1.3 APN的存储位置与加载位置1.3.1 存储位置1.3.2 加载位置 2 APN加载流程分析2.1 APN的创建&#xff1a;从XML到database2.2 APN匹配SIM卡与菜单显示2.3 PDP时APN选择2.3.1 createAllApnList2.3.4 set…

WEB渗透—反序列化(十)

Web渗透—反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩哔_…

git的基本命令操作超详细解析教程

Git基础教学 1、初始化配置2、初始化仓库3、工作区域和文件状态4、添加和提交文件5、git reset 回退版本6、git diff查看差异7、删除文件git rm8、.gitignore9、本地文件提交到远程仓库10、分支基础 Git&#xff1a;一个开源的分布式版本控制系统&#xff0c;它可以在本地和远程…

【LeetCode每日一题合集】2023.11.20-2023.11.26 (二叉树中的伪回文路径)

文章目录 53. 最大子数组和解法1——DP解法2——分治&#xff08;维护区间、类似线段树的思想&#xff09; 2216. 美化数组的最少删除数&#xff08;贪心&#xff09;2304. 网格中的最小路径代价1410. HTML 实体解析器&#xff08;模拟&#xff09;2824. 统计和小于目标的下标对…

高端网站设计公司 -蓝蓝设计数据可视化大屏服务

UI设计公司-蓝蓝设计&#xff08;北京兰亭妙微科技有限公司&#xff09;是一支由清华美院毕业的专业团队组成的设计公司。我们的设计师们在大屏科研信息软件UI设计领域拥有多年的工作经验和丰富的行业知识。我们对设计充满热爱&#xff0c;设计不仅是我们的专业和职业&#xff…

如何快速了解一家公司?

在炒股过程中&#xff0c;我们想要了解一家公司是否具有投资价值&#xff0c;需要查看和阅读很多公司的相关资料。股民们自行去查询往往会花费很多的时间精力&#xff0c;所以专业的炒股软件一般都会给股民提供这些现成的资料。 在金斗云智投APP内&#xff0c;进入到个股详情页…