JavaScript基础

69 阅读4分钟

JavaScript 基础一

JavaScript 基本概念

javaScript组成:ecmascript(基础语法):规定了js基础语法核心知识 如:变量、分支、循环语句、对象等

web apls:DOM 操作文档,控制页面机进行移动、大小、添加删除等;

BOM 操作浏览器,页面弹窗、检测窗口宽度,存储数据到浏览器;

DOM属于BOM

JavaScript:运行在客户端浏览器的编程语言,实现人机交互的效果

javascript:网页特效,用户点击网页时网页所作出的反应;表单验证,针对表单的数据合法性进行判断;数据交互,获取后台数据,渲染到前端页面;服务端编程(node.js)

运行环境:

谷歌浏览器运行环境: DOM、BOM、xhr、内置对象 -> 待执行的js代码 -> v8引擎

noode.js运行环境: fs、path、其他、api、内置对象 -> 待执行的js代码 -> v8引擎

image.png

JavaScript 书写位置

JavaScript三种添加方式:内部、内联、外部

内部

 <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Document</title>
 ​
     <script>
         alert("nihaoasdghaksjdghjas")
     </script>
 ​
 </head>注意:我们将 <script> 放在HTML文件的底部附近的原因是浏览器会按照代码在文件中的顺序加载 HTML。如果先加载的 JavaScript 期望修改其下方的 HTML,那么它可能由于 HTML 尚未被加载而失效。因此,将 JavaScript 代码放在 HTML页面的底部附近通常是最好的策略。

外部

 <body>
     <script src="./neibu.js"></script>
 </body>

内联

 <body>
     <button onclick="alert('逗你玩')">点击我</button>
 </body>
 外面写双引号里面写单引号,需要注意下;
 不常用,容易写错;

输入和输出语法

 <body>
     <!-- 输出 -->
     <!-- 第一种直接写在body标签里面 -->
     <script>
         document.write('hhhh')
     </script>
     <!-- 第二种通过alert('')里面添加 -->
     <script>
         alert('kongzhitaidayin');
     </script>
     <!-- 第三种控制输出台语法进行调试 -->
     <script>
         console.log('kongzhitaidayin');
     </script>
 ​
     <!-- 输入 -->
     <script>
         // 获取用户输入的文字内容
         // 自定义一个变量=用户输入的内容  
         // (hhhh就是自定义变量)
         hhhh = prompt('你的名字');
         document.write(hhhh)
     </script>
 ​
 </body>

变量

变量的基本概念与使用

变量:就是一个容器,存放数据的;

变量是通过 let(声明关键字) 变量名; let(固定的) age;

可以同时声明多个变量,但是不允许多次使用同一个声明变量

 <body>
     <script>
         let userName;
         userName = '123';
         // 注意加单引号
         console.log(userName);
         // 不需要等号和引号
        //常用写法,控制台
 ​
         let age;
         age = '456';
         alert(age)
         //弹窗式写法
 ​
         let comeFrom;
         comeFrom = '789';
         document.write(comeFrom);
         //写在body标签里面
     </script>
 ​
     <script>
         let num1 = '10', num2 = '20', teap;
         teap = num1;
         num1 = num2;
         num2 = teap;
 ​
         console.log(num1, num2)
 ​
         //数据交换需要先设置一个空变量;
     </script>
 </body>

变量的本质

内存:是计算机储存数据的地方,相当于一个大盒子;

变量:则是内存(大盒子)里面的一个小盒子;

变量命名规则与规范

规则:不能使用关键字 JavaScript自身所包含的代码,开头可以使用下划线、字母或者$符号 但是不能数字开头 ,区分大小写如 Age 和 age 是不同的变量 ;

规范:遵守小驼峰命名法,ü第一个单词首字母小写,后面每个单词首字母大写。例:user Name;

数据类型

js数据分为一下两大类

基本数据类型:nubber 数字型;sting 字符串型;boolean 布尔型;undefined 未定义型;null 空类型;

引用数据类型:object 对象;function 函数;array 数组;

数字类型(number):正数、负数、小数;

 let score=100;未加引号,属于数字类型

tips(js是属于弱数据类型需要赋值才可以确认,Java属于强数据类型 必须是整数);

字符串类型(string):由 单引号 双引号 或者 ( ` 反引号)包裹都是字符串,推荐使用单引号;

tips(单引号或者双引号都必须成对使用,双引号或者单引号都可以互相嵌套,外双内单或外单内双);

布尔类型(boolean):用于表示肯定(true)或者否定(false);

未定义类型(undefined):只声明变量没有赋值,用于测试用户是否有数据进行反馈;

空类型(null): null 与 undefined 的区别在于 null 表示赋值了但是内容为空 undefined 没有赋值;null空类型相当于 a 标签链接里面放入 # 只是内容还有完善;

数据转换

typeof:用于检测 声明变量是是哪个数据类型;

 <body>
     <script>
         let age = ('18');
         let number = (555);
         let boolean = (true);
         let agee
         let ageee = (null)
         console.log(typeof age)
         console.log(typeof number)
         console.log(typeof true)
         console.log(typeof agee)
         console.log(typeof ageee)
     </script>
 </body>

隐式转换

运算符在在运算过程中,系统会自动转换;

除了 加 以外的运算 如 减 乘 除都会自动转换成数字类型;

 let number1 = +prompt('输入一个数字');
         let number2 = +prompt('输入一个数字');
         let total = (number1 + number2);
         console.log(total);

显示转换:自己写代码告诉系统转换成那种类型;

number(数据)转成数字类型,字符串里面有非数字时 会转换失败显示NAN,但是NAN也是数字类型的一种,代表的是非数字; parselnt 保留整数 parsefloat 可以保留小数;

     <script>
         let age = 18
         let str = (age + '')
         console.log(typeof str)
 ​
         let age = 18
         let str = String(age)
         console.log(typeof str)
 ​
 ​
         let age = '18'
         let str = 0 * age
         console.log(typeof str)
 ​
     </script>

\

JavaScript 基础二

运算符

算术运算符

算术运算符:加、减、乘、除、取余(求模)

 <script>
         console.log(4 % 12)
         // 前面的数值小于后面的数值  输出都为前面的数值本身 =4
         console.log(17 % 4)
         // 输出值为 1  意思就是 4乘以4等于16与17的差值为 1
     </script>

练习

 <script>
         let r = prompt('输入半径')
         console.log(Math.PI * r * r)
 ​
     </script>

赋值运算

赋值运算符:= 将等号右边的值赋予给左边, 要求左边必须是一个变量

 <script>
         let num = 1
         num += 9
         console.log(num)
 ​
         let num1 = 1
         num1 -= 9
         console.log(num1)
 ​
         let num2 = 1
         num2 *= -9
         console.log(num2)
 ​
         let num3 = 98
         num3 %= 9
         console.log(num3)
 ​
 ​
         //let num = 10 , num 加5 怎么写呢?
         let num=10      
         num += 5
         输出结果为 15
     </script>

一元运算符

前置自增:先自加再使用(++在前,先加

后置自增:先使用再自加(++在后,后加

前置自增和后置自增单独使用没有区别,合在一起使用则有区别,在写项目时后置自增i++使用比较多

     <script>
         let i = 1
         console.log(i++ + 2) // 3
         // 先运算 i+2=3
         // 在运算 i++
         // 输出结果为i=2
 ​
         let i = 1
         console.log(i++ + ++i + i)
         // console.log((i++) + (++i) + i)
         //第一步 i++浏览器输出结果 1 ;但是i=2 因为第二步 i+=1 浏览器不会显示
         //因第一步得到 i=2 所以 i=2 赋值给 (++i)浏览器输出为 3 , i=3,赋值给最后一个 i 所以最后一个i=3
         // i++ =1  ++1=3  i=3  结果为 7
     </script>

比较运算符

NaN不等于任何值,包括它本身,l尽量不要比较小数,因为小数有精度问题;

不同类型之间比较会发生隐式转换:最终把数据隐式转换转成number类型再比较;开发中如果进行准确的比较 使用=== 或者! ==

Ø> : 左边是否大于右边
Ø<: 左边是否小于右边
Ø>=: 左边是否大于或等于右边
Ø<=: 左边是否小于或等于右边
Ø==: 左右两边是否相等,将两边的数据进行转换为数值
Ø===: 左右两边是否类型和值都相等
Ø!==: 左右两边是否不全等
Ø比较结果为boolean类型,即只会得到true或false

逻辑运算符

短路运算:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行

&& 左边为false 否定时 就短路 后面的内容就不会显示,反之则相反

 <script>
       // 一假则假  && 左边为false 右边就不再去执行
 ​
       // 工作中常见的写法
       // 如果今天还下雨 那我就去吃海鲜
       //   不下雨 不去吃海鲜了
       // let rain = false;
 ​
       // 左边成立了 右边才会去执行
       // rain && console.log('下雨 去吃海鲜');
 ​
     </script>

|| 左边为 true 为肯定时 就短路 后面的内容不会显示,反之则相反

 <script>
       // 逻辑或 一真则真
       // 只要 || 左边 成立了为true,右边就不再去执行
       // console.log(100 > 3 || 2 > 6 || 9 > 10 || 10 > 11 || 13 > 20);
 ​
       // 工作中 常用的技巧
       // 如果下雨,那么我就不玩了
       let rain = false;
       rain || console.log('去玩');
 ​
       // 两个短路运算  逻辑或 和 逻辑与 
       //   工作中的语法  逻辑与来说   满足了 就去执行
       //   工作中的语法  逻辑或来说   不满足了 就去执行
     </script>
符号名称读法特点口诀
&&逻辑与并且符号两边为true结果才为 true一假则假
****逻辑或或者符号两边有一个true就为true一真则真
!逻辑非取反true变false false变true真变假,假变真

下列数值设置成布尔类型后为 false

 ​
     <script>
       // 哪一些值转成 布尔类型后 false 
       // undefined null 0 空字符串 false  NaN 
       console.log( Boolean(undefined) );
       console.log( Boolean(null) );
       console.log( Boolean(0) );
       console.log( Boolean("") );
       console.log( Boolean(false) );
       console.log( Boolean(NaN) );
       console.log( Boolean('') );
     </script>

1648370769452

练习

能被四整除,但不能被100整除

 <script>
         let num = prompt('输入数字')
         console.log((num % 4 === 0) && (100 % num !== 0))
 ​
     </script>

语句

表达式和语句

表达式和语句的区别:表达式计算出一个值表达式 3 + 4,语句用来自行以使某件事发生(做什么事)语句 alert() 弹出对话框

分支语句

程序三大流程控制语句

顺序结构、分支结构、循环结构

     //if语句
     //小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型
     <script>
         //单分支
         let number = +prompt('请输入巅峰赛分数')
         if (number < 2000) {
             alert('人菜瘾大')
         }
 ​
         //双分支
         let number = +prompt('请输入巅峰赛分数')
         if (number < 2000) {
             alert('人菜瘾大')
         } else {
             alert('富士康9号流水线打螺丝')
         }
 ​
         //多分支
         let number = +prompt('请输入巅峰赛分数')
         if (number < 2000) {
             alert('人菜瘾大')
         } else if (number < 2100) {
             alert('富士康9号流水线打螺丝')
         }
         else if (number < 2300) {
             alert('7号流水线')
         } else {
             alert('123456')
         }
 ​
     </script>

三元运算符

一般用于取值

    <script>
         // let num1 = +prompt('数值')
         // let num2 = +prompt('数值')
         // num1 > num2 ? console.log(num1) : console.log(num2)
        
 ​
         // let num3 = +prompt('数值')
         // num3 < 10 ? console.log('0' + num3) : console.log(num3)
 ​
 ​
         let num4 = +prompt('数值一')
         let num5 = +prompt('数值二')
         let num6 = prompt('输入运算符')
 ​
         if (num6 == '-') { console.log(num4 - num5) }
         // console.log(num4 - num5)
         // console.log(num4 / num5)
         // console.log(num4 * num5)
     </script>

循环结构

断点调试

浏览器打开调试界面:按F12打开开发者工具;点到sources一栏;选择代码文件

1648426983309

断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来

while循环

while循环是无限循环又叫死循环,满足大括号里面的条件会无限循环,只有不满足括号里面的条件才会停止循环或者设置break终止循环

循环三要素:变量初始值、终止条件、变量变化量

     <script>
         //死循环
         let i = 1
         while (i) {
             document.write(`1111111111<br>`)
             ++i
         }
 ​
 ​
         let i = 1
         let num = +prompt('数值')
         while (i <= num) {
             document.write('月薪过万<br>')
             i++
         }
 ​
 ​
         let i = 1
         let sum = 0
         while (i <= 100) {
             if (i % 2 === 0) {
                 sum += i
             }
             i++
         }
         console.log(sum)
 ​
 ​
         let i
         while (1) {
             i = prompt('你爱我吗')
             if (i == '爱') {
                 i !== '爱'
             }
 ​
         }
 ​
 ​
         let sum = 0
         let i = 1
         while (i <= 100) {
             if (i % 5 === 0) {
                 sum = sum + i
             }
             i++
         }
         console.log(sum)
 ​
         let i = 0
         while (i <= 100) {
             i = i + 0
             i++
             console.log(i)
         }
 ​
     </script>
  let i
         let i1
         let i2
         let money = 1000
 ​
         while (i !== 4) {
             i = +prompt(`
         1.存钱
         2.取钱
         3.查看余额
         4退出功能`)
 ​
             if (i == 1) {
                 i1 = prompt('存钱金额')
                 money = money + i1
             }
             if (i == 2) {
                 i2 = prompt('取款金额')
                 money = money - i2
 ​
             }
             if (i == 3) {
                 alert(`余额 ${money}`)
             }
         }

练习补充

 console.log('2'>'19')  
 //两个字符串比较,出现两位数值的先把前面的十位数拿出来作比较   '2' > '1' 输出为 true 
 ​
 console.log('2'>19) 
 //运算符两侧一个字符串和一个数字,会先把字符串转成数字,在进行比较

\

JavaScript 基础三

循环

for循环

for循环:重复执行代码,声明起始值、循环条件、变化值都是写在一起

for循环与while循环的区别:当明确循环次数的时候使用for循环,不明确循环次数时使用while循环

  <script>
         for (let i = 1; i <= 100; i++) {
             i = i + 1
             console.log(i)
         }
 ​
         //一到一百的偶数求和
         let sum = 0
         for (let i = 0; i <= 100; i++) {
 ​
             if (i % 2 === 0) {
                 sum = sum + i
             }
         }
         console.log(sum)
 ​
 ​
         for (let i = 1; i <= 500; i++) {
             document.write(i, `这是小星星⭐<br>`)
         }
 ​
         
     </script>

退出循环

break:退出循环、跳出本次循环

continue:结束本次循环,继续下次循环

循环嵌套

嵌套循环 外循环一次,内循环全部循环一次

 <script>
         // 嵌套循环 外循环一次,内循环全部循环一次
         // day输出1次时 i输出5次  
         for (let day = 1; day <= 3; day++) {
             document.write(`${day}天<br>`)
             for (let i = 1; i <= 5; i++) {
 ​
                 document.write(`${i}<br>`)
 ​
             }
         }
 ​
 ​
         for (i = 1; i <= 5; i++) {
             for (i1 = 1; i1 <= 5; i1++) {
                 document.write(`⭐`)
             }
             document.write(`<br>`)
         }
 ​
         // 三角形
         for (i = 1; i <= 5; i++) {
             for (i1 = 1; i1 <= i; i1++) {
                 document.write('⭐')
             }
             document.write('<br>')
         }
 ​
         // 九九乘法表
         for (i = 1; i <= 9; i++) {
             for (i1 = 1; i1 <= i; i1++) {
                 document.write(`${i1}*${i}=${i1 * i}`)
             }
             document.write('<br>')
         }
 ​
 ​
 ​
         let i = 0
         for (; i <= 10; i++) {
             if (i % 2 == 0) {
                 continue
             }
             console.log(i)
             if (i === 7) { break }
         }
         console.log(i)
 ​
         let num = 10
         for (let i = 0; i < 10; i++) {
             num++
             if (i == 3) {
                 break
             }
             console.log(num)//写在里面是,先判断在输出
         }
         console.log(num)//写在外面是,先输出i在进行判断
 ​
     </script>

\

数组

数组:按照顺序用于储存数据的数据类型,数组里面的内容叫 元素 每个内容都是有编号的又叫做 索引、下标 索引下标时从零开始的

声明语法:使用复数 如arr list 名词s items Stus

tips:数组在进行输出时直接选择 console.log 来进行输出 而不要选择 alert 和 document.write 因为这个输出会转成字符串不属于数组 不带【】中括号

 <script>
         let names = ['nihao', 'nihao']
         console.log(names)
 ​
 ​
 ​
         // 数组的遍历
         let names = ['数组1', '数组2', '数组3', '数组4']
         for (let i = 1; i < names.length; i++) {
             console.log(names[i])
         }
         //console.log(names[2])
         //console.log(names.length)
         //数组的选择方式
     </script>

数组增加

     <script>
         let arr = [12, 1, 522, 45]
         // 在最后增加一个元素
         arr.push(10)
         // 在最前面增加一个元素
         arr.unshift22)
 ​
         console.log(arr)
 ​
         // 去除数组里面的 0 元素 并生成新的数字
         let arr = [1, 8, 6, 94, , 0, 3, 55]
         let num = []
         for (let i = 0; i < arr.length; i++) {
             if (arr[i] > 0) {
                 num.push(arr[i])
             }
         }
         console.log(num)
     </script>

数组删除

 <script>
         let arr = [2, 37, 5, 35, 43, 85]
         // 删除最后一个
         arr.pop()
         //删除第一个
         arr.shift()
         //选择删除数组的第几个
         arr.splice(2)
 ​
         // 第一个 1 选择索引下标为 1 的元素
         // 第二个 1 删除索引下标为 1 的元素
         // 并把原来索引下标为 1 的元素替换成 9999
         arr.splice(1, 1, "9999")
         // 第一个 2 选择索引下标为 2 的元素
         // 第二个 0 表示不删除任何元素,并且元素 9999 会把 原来索引下标为 2 的元素 往后面挤
         // 全程没有元素减少,只有增加元素
         arr.splice(2, 0, "9999")
         console.log(arr)
     </script>

image.png

动态树状图案例解析

第一步

需求分析:

1、通过动态图的得到四个输入框,并且需要用户自行输入数字决定树状图柱子的高度

2、还得到每个树状图柱子有自己的样式

第二步

实现需求

1、先写静态页面并设置好样式

2、根据需要设置一个空数组,通过输入框得到用户输入的数据,配合数组增加功能,将数据添加到之前设置的空数组里面,

3、设置循环静态页面标签填入循环内

4、根据效果图进行调整

 <body>
     <!-- <div class="box">
         <div style="height: 30px;">
             <p>100</p>
             <span>第一季度</span>
         </div>
     </div> -->
 ​
 ​
 ​
     <script>
         let arr = []
         let htmlstr = `<div class="box">`
 ​
         for (let i = 0; i < 4; i++) {
             arr.push(+prompt('输入数值'))
         }
 ​
         for (index = 0; index < arr.length; index++) {
             htmlstr += (`
             <div style="height: ${arr[index]}px;">
             <p> ${arr[index]}</p>
             <span>第${index}季度</span>
         </div>`)
         }
         htmlstr += `</div>`
         document.write(htmlstr)
     </script>
 </body>

\

JavaScript 基础四

函数

函数:精简代码、提高效率、方便多次使用,函数又叫做执行特定任务的代码块

函数命名规范

1.和变量命名一致 2.使用小驼峰命名法 3.前缀应该为动词

函数不调用不会执行

     <script>
         // 函数声明
         // 函数里面可以填写任何内容(所有循环、数组等都可以进行调用)
         function hit() {
             console.log('打你一下')
             console.log('打你两下')
             console.log('给你一jio')
         }
         // 函数调用次数  一个调用一次、两个调用两次
         hit()
         hit()
     </script>

函数求奇数和

 let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
 ​
         function sum(arr) {
             let sum = 0
             for (index = 0; index < arr.length; index++) {
                 if (arr[index] % 2 !== 0) {
                     sum += arr[index]
                 }
             }
             console.log(sum)
         }
         sum(arr)

函数传参

函数传参分为:形参和实参 在调用函数括号里面是实参 写在声明函数括号里面是形参

实参是什么形参就是什么,需要设置多个实参需用逗号隔开,且实参数据的顺序和个数需要与形参填写一致,否则输出会显示 undefined 未定义数据类型

总分求和

         let arr1 = [31, 68, 350]
         let arr2 = [41, 58, 15]
 ​
         function sum(arr) {
             let total = 0
 ​
             for (index = 0; index < arr.length; index++) {
                 total += arr[index]
             }
             console.log(total);
         }
 ​
         sum(arr1)
         sum(arr2)

函数返回值

在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用

函数内部只能运行到 1 次 return,并且 return 后面代码不会再被执行,所以 return 后面的数据不要换行写

return会立即结束当前函数

函数可以没有 return,这种情况函数默认返回值为 undefined

     <script>
         function getmax(a, b) {
             if (a > b) {
                 return a
             } else {
                 return b
             }
         }
 ​
         console.log(getmax(2, 6))
     </script>

作用域

全局作用和局部作用域=全局变量和局部变量

全局作用域写在 script 里面 所有代码都可以调用

局部作用域写在for while function 里面叫做 局部作用域 只能在自己这个区域使用不能跨区域

就近原则

JavaScript 基础五

对象

对象:是一种数据类型;无序的数据的集合,可以详细描述某个事物;

对象使用方法

属性:信息或叫特征(名词)。 比如 手机尺寸、颜色、重量等…

方法:功能或叫行为(动词)。 比如 手机打电话、发短信、玩游戏…

tips:

1.属性名和属性值之间使用英文 : 分隔

2.多个属性之间使用英文 , 分隔

3.属性就是依附在对象上的变量(外面是变量,对象内是属性)

4.属性名可以使用 "" 或 '',一般情况下省略,除非名称遇到特殊符号如空格、中横线等

对象访问

对象访问属性有两种方式:点形式 对象.属性 [ ] 形式 对象[ ‘ 属性 ’ ]

两种方式的区别:点后面的属性名一定不要加引号 [ ] 里面的属性名加引号,除非它是一个变量

         let goods = {
             phone: '(小米)',
             name: '小米10青春版',
             num: 10213122,
             weight: '0.55kg',
             address: '中国大陆',
         }
         //对象加【】的方式获取里面的属性方式  中括号里面一定要加点 引号
         //如果没有加引号则是 选择一个变量 若是没有这个变量则是 输出 und
         document.write(`${goods['name']}${goods['address']}`)
         //对象加 . 获取属性方式
         console.log(`${goods.name}${goods.address}`)
 ​
         let name = {
             names: '你好',
             age: 20,
             jump: function () {
                 document.write('唱跳rap篮球')
             }
         }
 ​
         console.log(`${name.jump}`)
         console.log(name['age'])

操作对象

对象本质是无序的数据集合, 操作数据无非就是 增 删 改 查 语法:

有则修改,无则添加

 <script>
       // let person = {
       //   // username: '程序猿',
       // };
 ​
       // 增加 一个新的属性
       // person.username="普通人";
 ​
       // 修改
       // person.username = '普通人';
 ​
       // 增加属性和修改属性都是同样的写法
       // 如果该属性对象中没有,表示新增
       // 如果该属性对象中已经存在,表示修改
       // person.username = '普通人';
 ​
       // console.log(person);
 ​
       // 新增方法也是可以的
       let person = {};
 ​
       // 新增一个方法  匿名函数 固定写法
       person.sayHi = function  () {
         document.write('这个是我们新增的sayHi 方法');
       };
 ​
       person.sayHi(); // 调用方法
 ​
 ​
         // 声明一个对象
       let person={
         username:"海贼王"
       };
 ​
       // 不想看了  给删除掉
       delete person.username;  // 删除对象中的  username属性
 ​
       console.log(person.username); // undefined 
     </script>

\

遍历对象

对象没有像数组一样的length属性,所以无法确定长度,

对象里面是无序的键值对, 没有规律. 不像数组里面有规律的下标

遍历对象语句:for in

遍历对象中, for key in obj,获得对象属性是那个,获得值是

获得对象属性是 key

获得对象值是 obj[key]

 //遍历对象  属性名和属性值获取练习
 let goods = {
             name: '小米',
             height: 120,
             windth: '60g',
             hit: function () {
                 document.write('打电话')
             }
         }
 ​
         for (const key in goods) {
             console.log(key)
             console.log(goods[key])
         }
 <script>
         //   遍历对象案例
         //     let students = [         //         { name: '小明', age: 18, gender: '男', hometown: '河北省' },         //         { name: '小红', age: 19, gender: '女', hometown: '河南省' },         //         { name: '小刚', age: 17, gender: '男', hometown: '山西省' },         //         { name: '小丽', age: 18, gender: '女', hometown: '山东省' }         //     ]
 ​
         //     let htmlStr = `<table>
         //     <caption></caption>
         //     <dl>
         //         <tr>
         //             <th>序号</th>
         //             <th>姓名</th>
         //             <th>年龄</th>
         //             <th>性别</th>
         //             <th>家乡</th>
         //         </tr>`
         //     for (let index = 0; index < students.length; index++) {
         //         htmlStr += `
         //         <tr>
         //             <td>${index + 1}</td>
         //             <td>${students[index].name}</td>
         //             <td>${students[index].age}</td>
         //             <td>${students[index].gender}</td>
         //             <td>${students[index].hometown}</td>
         //         </tr>
         // `
         //     }
         //     htmlStr += `        </dl>
         // </table>`
         //     document.write(htmlStr)
 ​
 ​
         let students = [             { name: '小明', age: 18, gender: '男', hometown: '河北省' },             { name: '小红', age: 19, gender: '女', hometown: '河南省' },             { name: '小刚', age: 17, gender: '男', hometown: '山西省' },             { name: '小丽', age: 18, gender: '女', hometown: '山东省' }         ]
 ​
         let htmlStr = `<table>
         <caption></caption>
         <dl>
             <tr>
                 <th>序号</th>
                 <th>姓名</th>
                 <th>年龄</th>
                 <th>性别</th>
                 <th>家乡</th>
             </tr>`
         for (let index = 0; index < students.length; index++) {
             htmlStr += `<tr><td>${index + 1}</td>`
             for (const key in students[index]) {
                 htmlStr += `<td>${students[index][key]}</td>`
             }
             htmlStr += `</tr>`
         }
         htmlStr += `</dl></table>`
         document.write(htmlStr)
     </script>

内置对象

1.random:生成0-1之间的随机数(包含0不包括1)

2.ceil:向上取整

3.floor:向下取整

4.max:找最大数

5.min:找最小数

6.pow:幂运算

7.abs:绝对值

        //ceil向上取整
        //floor向下取整
        let stochastic = Math.ceil((Math.random() * 10))
        console.log(stochastic)

        //round四舍五入
        let stochastic = Math.round((Math.random() * 5) + 5)
        console.log(stochastic)

        //通用公式
        function get(min, max) {
            return Math.round(Math.random() * (max - min)) + min
        }

案例

 <script>
         //随机点名
         //let arr = ['赵云', '黄忠', '关羽', '张飞', '马超', '刘备', '曹操']
 ​
         //     function getRandom(min, max) {
         //         return Math.round(Math.random() * (max - min) + min);
         //     }
         //     let index = getRandom(0, arr.length - 1);
         //     console.log(arr[index]);
 ​
         // function get(min, max) {
         //     return Math.round(Math.random() * (max - min)) + min
         // }
 ​
         // while (arr.length > 0) {
         //     let arrrandon = get(0, arr.length - 1)
         //     console.log(arr[arrrandon])
         //     arr.splice(arrrandon, 1)
         // }
 ​
 ​
         //猜大小
         let Roguelike = Math.round(Math.random() * 10)
         while (1) {
 ​
             let num = +prompt('输入数值')
             if (num > Roguelike) {
                 alert('大了')
             } else if (num < Roguelike) {
                 alert('小了')
             } else if (num == Roguelike) {
                 alert('对了')
                 break
             }
 ​
         }
     </script>