JavaScript 学习笔记 day12 2021-4-20

JavaScript 学习笔记 day12 2021-4-20

1.js的组成

ECMAScript :JavaScript语法

DOM :页面文档对象模型

BOM:浏览器对象模型

1.3 数据类型的分类

js把数据类型分为两类:

  • 简单数据类型(Number,String,Boolean,Undefined,Null)

  • 复杂数据类型(Object)

2.字符串转义符

\n 换行符,n是newline的意思

\ \ 斜杠\

’ '单引号

* *双引号

\t tab缩进

\b 空格,b是blank的意思

4.字符串拼接

+号总结口诀:数值相加,字符相连

2.5 布尔型Boolean

布尔型与数字相加的时候,true的值为1,false的值为0

2.6 Undefined 和 Null

Undefined + 1 等于NaN

Underfined + true 等于 NaN

null + 11 等于 11

true + null 等于 1

4.1 数据类型转换
  • 转换为字符串类型

  • 转换为数字型

  • 转换为布尔型

//1.把数字型转换为字符串型
var num = 10
var str = num.toString()
console.log(str)
//2.我们利用String
console.log(String(num))
//3.利用"+" 隐式转换
console.log(num+'')
4.4 转换为布尔型
  • 代表空、否定的值会被转换为false,如" "、0、NaN、null、undefined

  • 其余值都会被转换为true

//1.我们程序里面的等于符号 是 == 默认转换数据类型 会把字符串型的数据转换为数字型 只要求值相等
console.log(18 == '18')//true
//2.我们程序里面有全等 一模一样 要去 两侧的值 还有 数据类型完全一致才可以 true
console.log(18 === '18')//false
5.1 逻辑运算符

&& 全真为真
|| 有真为真

5.4 短路运算(逻辑中断)

1.逻辑与

  • 语法:表达式1&&表达式2
  • 如果第一个表达式的值为真,则返回表达式2
  • 如果第一个表达式的值为假,则返回表达式1

2.逻辑或

  • 语法:表达式1||表达式2
  • 如果表达式1结果为真,则返回表达式1
  • 如果表达式1结果为假,则返回表达式2
7.运算符优先级
  • 一元运算符里面的逻辑非优先级很高
  • 逻辑与比逻辑或优先级高

continue关键字 退出本次(当前次的循环)继续执行剩余次数循环

如果实参的个数小于形参的个数 多余的形参定义为undefined 最终的结果就是NaN

形参可以看做是不用声明的变量 num2 是一个变量但没有接受值 结果就是undefined

return 终止函数 return语句之后的代码不被执行

return返回的结果是最后一个值

5. arguments的使用

arguments展示形式是一个伪数组,因此可以进行遍历,伪数组具有以下特点

  • 具有length属性
  • 按索引方式存储数据
  • 不具有数组的push,pop等方法
函数声明的两种方式
//1.利用函数关键字自定义函数(命名函数)
function fn() {

}
fn()
//2.函数表达式(匿名函数)
var fun = function () {
  console.log('我是函数表达式')
}
fun()
//(1)fun是变量名 不是函数名
//(2)函数表达式声明方式跟声明变量差不多,只不过变量里存的是值 而 函数表达式里面存的是函数
//(3)函数表达式也可以进行传递参数
JavaScript作用域
//1.javascript作用域:就是代码名字(变量)在某个范围内起作用和效果 减少命名冲突
//2.js的作用域(es6)全局作用域 局部作用域
//3.全局作用域 整个script标签
//4.局部作用域 (函数作用域)在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
var num = 10
var num = 30
console.log(num)
function fn() {
  var num = 20
  console.log(num)
}
fn()
变量的作用域
  //变量的作用域:根据作用域不同分为全局变量和局部变量
  //1.全局变量:在全局作用域下的变量
  //注意 如果在函数内部 没有什么直接赋值的变量也属于全局变量
  var num = 10;
  console.log(num)
  function fn() {
    console.log(num)
  }
  //2.局部变量 在局部作用域下 后者在函数内部的变量就是 局部变量
  //函数的形参也可以看作是局部变量
  function fun() {
    var num1 = 10
    num2 = 20
  }
fun()
  console.log(num1)
  //3.从执行效率来看全局变量和局部变量
  //(1)全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
  //(2)局部变量 当我们程序执行完毕就会销毁,比较节约内存资源

js中没有块级作用域 js的作用域 全局作用域 局部作用域 现阶段我们js 没有 块级作用域
我们js 也是在es6的时候新增的块级作用域
块级作用域{} if{} for{}

 java
// if(xx){
//   int num = 10;
// }
//外面是不能调用num的
3. 作用域链
  • 只要是代码,就至少有一个作用域
  • 写在函数内部的局部作用域
  • 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
  • 根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链
function f1() {
  var num = 123
  function f2() {
    console.log(num)//站在目标出发,一层一层的往外查找
  }
  f2()
}
var num = 456
f1()
4.预解析

预解析和代码执行

1.我们js引擎运行js 分为两步 :预解析 代码执行

(1) 预解析 js引擎会把js 里面所有的var 还有 function 提升到当前作用域的最前面

(2) 代码执行 按照代码书写的顺序从上往下执行

2.预解析分为 变量预解析(变量提升) 和 函数预解析 (函数提升)

(1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作

(2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数

5.利用对象字面量创建对象{}
//利用对象字面量创建对象{}
//var obj = {} //创建了一个空的对象
var obj = {
  uname: '张三',
  age: 18,
  sex: 'male',
  sayHi: function () {
    console.log('hi~')
  }
}
//(1)里面的属性或者方法我们采取键值对的形式
//(2)多个属性或者方法中间用逗号隔开的
//(3)方法冒号后面跟的是一个匿名函数
//2.使用对象
//(1) 调用对象的属性 我们采取 对象名.属性名
console.log(obj.uname)
//(2) 调用属性还有一种方法 对象名['属性名']
console.log(obj['age'])
//(3) 调用对象的方法 sayHi 对象名.方法名 千万别忘记添加小括号
console.log(obj.sayHi())
变量、属性、函数、方法区别

变量 单独声明并赋值 使用的时候直接写变量名 单独存在

属性 在对象里面的不需要声明的 使用的时候必须是 对象.属性

函数和方法的相同点 都是实现某种功能 做某件事

函数是单独声明 并且调用的 函数名()单独存在的

方法 在对象里面 调用的时候 对象.方法()

利用new Object 创建对象
var obj = new Object()obj.name = 'zhangsan'obj.age = 20obj.sex = 'male'obj.sayHi = function () {  console.log('hi')}/** (1) 我们是利用 等号 = 赋值的方法 添加对象的属性和方法* (2) 每个属性和方法之间用 分号结束* */console.log(obj.name)console.log(obj['age'])obj.sayHi()
利用构造函数创建对象

1.构造函数名字首字母要大写

2.我们构造函数不需要return 就可以返回结果

3.我们调用构造函数 必须使用 new

4.我们只要new Star() 调用函数就创建一个对象 ldh { }

function Star(name, age, sex) {  this.name = name  this.age = age  this.sex = sex}var ldh = new Star('liudehua', 18, 'male')//调用函数返回的是一个对象var zxy = new Star('zhangxueyou', 58, 'male')//调用函数返回的是一个对象console.log(ldh.name);console.log(ldh['sex']);console.log(zxy.name);console.log(zxy.age);
构造函数和对象

1.构造函数 明星 泛指的某一大类 它类似于java语言里面的 类(class)
2.对象 特指 是一个具体的事物 刘德华
3.我们利用构造函数创建对象的过程我们也称为对象的实例化

new关键字执行过程

1.new 构造函数可以在内存中创建一个空的对象
2.this 就会指向刚才创建的空对象
3.执行构造函数代码,给这个空对象添加属性和方法
4.返回这个对象

遍历对象
//for in 遍历我们的对象for(let k in obj){  console.log(k)//i 变量 输出 得到的是 属性名  console.log(obj[k])//obj[k] 得到的是 属性值}

1.内置对象

Javascript中的对象分为3种:自定义对象、内置对象、浏览器对象

日期对象

Date() 日期对象 是一个构造函数 必须使用new 来调用创建我们的日期对象

1.使用Date

  var date = new Date()  console.log(date)

2.参数常用的写法 数字型

  var date1 = new Date(2019, 10, 1)  console.log(date1)//返回的是11月 不是10月  var date2 = new Date('2019-10-1 8:8:8')  console.log(date2)
日期格式化
//格式化日期 年月日var date = new Date()console.log(date.getFullYear())//返回当前日期的年 2021console.log(date.getMonth())//月份小1个月 记得月份+1console.log(date.getDate())//返回几号console.log(date.getDay())//返回周几//我们写一个2021年4月21日星期三var year = date.getFullYear()var month = date.getMonth() + 1var datee = date.getDate()var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']var day = date.getDay()console.log('今天是' + year + '年' + month + '月' + datee + '日' + ',' + arr[day])
//格式化日期 时分秒var date = new Date()console.log(date.getHours())console.log(date.getMinutes())console.log(date.getSeconds())
时间戳
//获得Date总的毫秒数(时间戳) 不是当前时间的毫秒数 而是距离1970年1月1号过了多少毫秒数//1.通过 valueof() getTime()var date = new Date()console.log(date.valueOf())console.log(date.getTime())//2.简单地写法var date1 = +new Date()console.log(date1)//3. H5新增 获得毫秒数console.log(Date.now())
function countDown(time) {  var nowTime = +new Date()  var inputTime = +new Date(time)  var times = (inputTime - nowTime) / 1000  var d = parseInt(times / 60 / 60 / 24)  var h = parseInt(times / 60 / 60 % 24)  var m = parseInt(times / 60 % 60)  var s = parseInt(times % 60)  var d = d < 10 ? '0' + d : d  var h = h < 10 ? '0' + h : h  var m = m < 10 ? '0' + m : m  var s = s < 10 ? '0' + s : s  return d + '天' + h + '时' + m + '分' + s + '秒'}console.log(countDown('2021-4-21 15:0:0'))
检测数组
//检测是否为数组//(1)instanceof 运算符 它可以用来检测是否为数组//(2)Array.isArray(参数)console.log(Array.isArray(arr))
添加删除数组元素方法
/*1.push() 在我们数组的末尾 添加一个或者多个数组元素* */var arr = [1,2,3]//arr.push(4,'pink')console.log(arr.push(4,'pink'))console.log(arr)/*2.unshift 在我们数组的开头 添加一个或者多个数组元素* */console.log(arr.unshift('red'))console.log(arr)
  • (1)push是可以给数组追加新的元素
  • (2)push()参数直接写 数组元素就可以了
  • (3)push完毕之后,返回的结果是 新数组的长度
  • (4)原数组也会发生变化
  /*3.pop() 它可以删除数组的最后一个元素  * */  console.log(arr.pop())  console.log(arr)  /** (1)pop是可以删除数组的最后一个元素 记住一次只能删除一个元素* (2)pop()没有参数* (3)pop完毕之后,返回的结果是 删除的元素* (4)原数组也会发生变化* */  /*4.shift() 它可以删除数组的第一个一个元素  * */  console.log(arr.shift())  console.log(arr)  /** (1)pop是可以删除数组的第一个元素 记住一次只能删除一个元素* (2)shift()没有参数* (3)shift完毕之后,返回的结果是 删除的元素* (4)原数组也会发生变化* */
//数组排序//1.翻转数组var arr = ['pink', 'red', 'blue']arr.reverse()console.log(arr)//2.数组排序(冒泡排序)var arr = [3, 4, 7, 1]arr.sort(function (a, b) {  //return a - b //升序排列  //return b - a //降序排列})console.log(arr)

返回数组元素索引号方法 indexOf(数组元素) 作用就是返回该元素的索引号 从前面开始查找

它只返回第一个满足条件的索引号

如果在该元素找不到该元素,则返回的是-1

数组去重(重点)
var arr = ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b']function unique(arr) {  var newArr = []  for (let i in arr) {    if (newArr.indexOf(arr[i]) === -1) {      newArr.push(arr[i])    }  }  return newArr}console.log(unique(arr))

数组转换为字符串

  //1. toString() 将数组转换为字符串  var arr = [1,2,3]  console.log(arr.toString())  //2.join(分隔符)  var arr1 =['green','blue','pink']  console.log(arr1.join('-'));

字符串查找位置和数量

  var str = 'abcoefoxyozzopp'  var j = str.indexOf('o')  var count = 0  while (str.indexOf('o', j) != -1) {    console.log(str.indexOf('o', j))    j = str.indexOf('o', j) + 1    count++  }  console.log(count)  var str = 'abcoefoxyozzopp'  var index = str.indexOf('o')  var count = 0  while (index !== -1) {    console.log(index)    index = str.indexOf('o', index + 1)    count++  }  console.log(count)

根据位置返回字符

//判断一个字符串'abcoefoxyozzopp'中出现次数最多的字符,并统计其次数/*核心算法:利用charAt()遍历这个字符串把每个字符串都存储给对象,如果对象没有该属性,就为1,如果存在了就+1遍历对象,得到最大值和该字符* */  var str = 'abcoefoxyozzopp'  var word = {}  for (var i = 0; i < str.length; i++) {    var chars = str.charAt(i)    if (word[chars]) {      word[chars]++    } else {      word[chars] = 1    }  }  var max = 0  var ch = ''  for (var j in word) {    //k 得到是 属性名    //o[k] 得到的是属性值    if (word[j] > max) {      max = word[j]      ch = j    }  }  console.log(max)  console.log('最多的字符是'+ch)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值