当前位置:网站首页>js3day(数组操作,js冒泡排序,函数,调试窗口,作用域及作用域链,匿名函数,对象,Math对象)
js3day(数组操作,js冒泡排序,函数,调试窗口,作用域及作用域链,匿名函数,对象,Math对象)
2022-07-02 09:45:00 【荻风溪畔】
文章目录
数组操作
数组元素的增加
数组.push() 方法
将一个或多个元素添加到数组的末尾,并返回该数组的新长度
//筛选数组 push
let arr1 = [2, 23, 124, 56, 78, 9, 7, 6, 5, 4, 3]
let new_arr = []
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] < 10) {
new_arr.push(arr1[i]) //push这句话有返回值,返回当前新数组的长度
}
}
alert(`${
new_arr}`)
arr.unshift
(新增的内容) 方法将一个或多个元素添加到数组的开头
,并返回该数组的新长度
// 筛选数组 unshift
let arr1 = [2, 23, 124, 56, 78, 9, 7, 6, 5, 4, 3]
arr1.unshift(0, 1)
alert(arr1) // 0,1,2,23,124,56,78,9,7,6,5,4,3
数组元素的删除
数组. pop()
方法从数组中删除最后一个元素
,并返回该元素的值
let arr1 = [1, 2, 3, 4, 5]
arr1.pop()
alert(arr1) // 1,2,3,4
数组. shift()
方法从数组中删除第一个元素
,并返回该元素的值
let arr1 = [1, 2, 3, 4, 5]
arr1.shift()
alert(arr1) // 2,3,4,5
数组. splice()
方法 删除指定个数的元素
,返回删除的元素组成的数组
let arr1 = [1, 2, 3, 4, 5]
arr1.splice(2, 1)
alert(arr1) //1,2,4,5
let arr1 = [1, 2, 3, 4, 5]
arr1.splice(2) //默认删除start位置及其之后的所有元素
alert(arr1) //1,2
冒泡排序
<script>
// 筛选数组 unshift
let arr1 = [5, 23, 32, 5, 6, 1, 2]
for (let i = 0; i < arr1.length - 1; i++) {
for (let j = 0; j < arr1.length - i + 1; j++) {
let k = j + 1
if (arr1[j] < arr1[k]) {
let temp = arr1[k]
arr1[k] = arr1[j]
arr1[j] = temp
}
}
}
alert(arr1) //32,23,6,5,5,2,1
</script>
函数
返回多个值
<script>
function getSMax(arr) {
let max = arr[0], min = arr[0]
for (let i = 0; i < arr.length; i++) {
// if (max < arr[i]) {
// max = arr[i]
// }
// if (min > arr[i]) {
// min = arr[i]
// }
max = max < arr[i] ? arr[i] : max
min = min > arr[i] ? arr[i] : min
}
return [max, min]
}
let total = getSMax([42, 23, 5, 7, 676, 32, 4, 1])
alert(total)
</script>
argument伪数组
function fn() {
console.log(arguments)
let sum = 0
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i]
}
alert(sum)
}
fn(1, 2, 34) //alert(37)
可以看出,实参个数大于形参
,是能运行,实参个数小于形参
返回NaN
。
也可以像python一样设置个默认的实参
function fn(x = 0, y = 1) {
//默认参数是x=0,y=1
alert(x + y)
}
fn(3, 5) //8
fn() //1
调试
作用域
全局作用域 局部作用域 块级作用域分别对应下面的相应变量
注意点(今天都忘了):
如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
但是有一种情况,函数内部的形参可以看做是局部变量。
作用域链
采取就近原则的方式来查找变量最终的值
function f1() {
let num = 123
function f2() {
console.log(num)
}
f2()
}
let num = 456
f1() //控制台输出123
匿名函数
立即执行函数
场景介绍: 避免全局变量
之间的污染
语法:
(function () {
alert(`直接显示我了`) } ) ()
(function () {
alert(`直接显示你了`) } () )
本质:其实通过后面的()
已经调用了
注意: 多个立即执行函数要用 ;
隔开,要不然会报错(没加也没报错~~)
时间转换示例
<script>
let time = prompt("输入总的秒数")
function getTime(time) {
let h = parseInt(time / 60 / 60 % 24)
let m = parseInt(time / 60 % 60)
let s = parseInt(time % 60)
h = h < 10 ? '0' + h : h
m = m < 10 ? '0' + m : m
s = s < 10 ? '0' + s : s
document.write(`${
h}小时${
m}分钟${
s}秒`)
}
getTime(time)
</script>
对象:
对象的增删改查
let goods = {
//属性
name: '逮虾户',
age: 18,
address: "港珠澳大桥洞下",
// 方法
sing: function () {
document.write('青春不常在,抓紧谈恋爱</br>')
}
}
// 调用属性
document.write(goods.name + "<br>") //逮虾户
document.write(goods['age'] + "<br>") //18
// 调用方法
goods.sing() //青春不常在,抓紧谈恋爱
//从外部增加对象的方法
goods.run = function () {
document.write('记得每天跑个五公里!<br>')
}
goods.run() //记得每天跑个五公里!
//从外部增加属性的方法
goods.skill = "跨越山和大海"
document.write(goods['skill'] + "<br>") //跨越山和大海
遍历对象:
let obj = {
uname: 'andy ', age: 18,
sex: '男'
}
for (let k in obj) {
document.write(k + '\t') // 打印属性名
document.write(`${
obj[k]} `)// 打印属性值
document.write(`<strong color='red'>${
obj.k} </strong> <br>`)// undefined 不可行,除非有k这种属性名
}
Math内置对象
Math.random()
简记:左闭右开
区间,括号里面不填数字!
Math.random() //一个浮点型伪随机数字,在0(包括0)和1(不包括)之间
Math.ceil(1.5) //2 天花板,向上取整
Math.floor(2.4) //2 地板,向下取整
Math.round(-1.5) // -1 函数返回一个数字四舍五入后最接近的整数。
Math.round(2.5) // 3 函数返回一个数字四舍五入后最接近的整数。
Math.pow(8, 2) // 64 返回基数(base)的指数(exponent)次幂
- 如何生成
0-10
的随机整数呢?
Math.floor(Math.random()*(11))
Math.floor(Math.random() * (10 + 1))
- 如何生成
5-10
的随机整数?
Math.floor(Math.random() * (5 + 1)) + 5
- 如何生成
N-M
之间的随机整数
Math.floor(Math.random() * (M - N + 1)) + N
//封装 随机数 min到max之间
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
学生信息表案例
<!DOCTYPE html>
<html lang="en">
<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>
<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>
</head>
<body>
<script> let students = [ {
name: '小明', age: 18, gender: '男', hometown: '河北省'}, {
name: '小红', age: 19, gender: '女', hometown: '河南省'}, {
name: '小刚', age: 17, gender: '男', hometown: '山西省'}, {
name: '小丽', age: 18, gender: '女', hometown: '山东省'} ] document.write(`<table> <caption> <h2>学生列表</h2> </caption> <tr> <th>序号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>家乡</th> </tr>`) for (let i = 0; i < students.length; i++) {
let student = students[i]; document.write(`<tr>`) document.write(`<td>${
i + 1}</td>`) for (let k in student) {
document.write(`<td>${
student[k]}</td>`) // k 是获得对象的属性名, 对象名[k] 是获得 属性值 // 一定记住: k 是获得对象的属性名, 对象名[k] 是获得 属性值 } document.write(`</tr>`) } document.write(`</table>`) </script>
</body>
</html>
存储方式
简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。
- 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型
string ,number,boolean,undefined,null
- 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型
通过new
关键字创建的对象(系统对象、自定义对象),如Object、Array、Date
等
//复杂数据类型
let obj = {
uname: 'andy ', age: 18,
sex: '男'
}
let obj2 = obj;
obj2.age = 20;
alert(`${
obj.age}, ${
obj2.age}`) //20,20
//简单数据类型
let num1 = 30
let num2 = num1
num2 = 10
alert(`${
num2}, ${
num1}`) //10, 30
简记:简单数据类型值存储,复杂数据类型按地址存储
1、栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中
的栈;
简单数据类型存放到栈
里面
2、堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。
引用数据类型存放到堆
里面
边栏推荐
- [ybtoj advanced training guidance] cross the river [BFS]
- Is the neural network (pinn) with embedded physical knowledge a pit?
- Js8day (rolling event (scroll family), offset family, client family, carousel map case (to be done))
- js 迭代器 生成器 异步代码处理 promise+生成器 -> await/async
- NTMFS4C05NT1G N-CH 30V 11.9A MOS管,PDF
- Docker compose configuration mysql, redis, mongodb
- JS10day(api 阶段性完结,正则表达式简介,自定义属性,过滤敏感词案例,注册模块验证案例)
- Oracle从入门到精通(第4版)
- Embedded Software Engineer career planning
- 高性能纠删码编码
猜你喜欢
BOM DOM
JDBC prevent SQL injection problems and solutions [preparedstatement]
BOM DOM
线性DP AcWing 898. 数字三角形
spfa AcWing 852. spfa判断负环
What is the relationship between NFT and metauniverse? How to view the market? The future market trend of NFT
堆 AcWing 839. 模拟堆
Bom Dom
Simple use of drools decision table
Dijkstra AcWing 850. Dijkstra求最短路 II
随机推荐
Sparkcontext: error initializing sparkcontext solution
百款拿来就能用的网页特效,不来看看吗?
线性DP AcWing 898. 数字三角形
Leetcode - Sword finger offer 59 - I, 59 - II
Rust语言文档精简版(上)——cargo、输出、基础语法、数据类型、所有权、结构体、枚举和模式匹配
Anxiety of a 211 programmer: working for 3 years with a monthly salary of less than 30000, worried about being replaced by fresh students
3 A VTT端接 稳压器 NCP51200MNTXG资料
Simple use of drools decision table
ASP. Net MVC default configuration, if any, jumps to the corresponding program in the specified area
CPU指令集介绍
8 examples of using date commands
H5 to app
Calculate the maximum path sum of binary tree
Deep Copy Event bus
浏览器存储方案
When uploading a file, the server reports an error: iofileuploadexception: processing of multipart / form data request failed There is no space on the device
Js6day (search, add and delete DOM nodes. Instantiation time, timestamp, timestamp cases, redrawing and reflow)
LTC3307AHV 符合EMI标准,降压转换器 QCA7005-AL33 PHY
MySQL and PostgreSQL methods to grab slow SQL
趣味 面试题