js拓展-Dom与事件,字符串,数组方法,object对象,作用域
js-扩展-Dom与事件
```text
# dom 文档对象模型,document object model
### 获取dom(js中的选择器)
js
let list=document.getElementById('list')
let liReds=document.getElementsByClassName('liRed')//collection集合,拥有和数组几乎完全一致的方法等
let lis=document.getElementsByTagName('li')//collection集合,可以理解为伪数组
### dom都可以做什么?
#### 1.改变html的输出流(说人话:可以把内容输出到页面上)
js
document.write(new Date())
#### 2.改变html的内容
js
liReds[1].innerHTML='哈哈哈'
#### 3.改变html属性
js
list.title='12345678'
#### 4.改变html样式
js
liReds[1].style.color='red'
#### 5.使用事件
鼠标事件:onmouseover,onmouseenter,onmousedown,onmouseup,onmousewheel,onmousemove,onmouseleave,onmouseout,onclick
键盘事件:onkeydown,onkeyup,onkeypress(不咋用)
窗口事件:onload,onscroll 滚动事件
表单事件:onfocus 获得焦点, onblur 失去焦点, onsubmit 提交, oninput ,onchange
```
## /js-扩展-onblur、oninput、onchange
```text
### onchange只有在元素发生改变时才会运行,onblur只要失去焦点就运行,oninput 事件在用户输入时触发。
js
let ipt=document.getElementById('ipt')
let screen=document.getElementById('screen')
ipt.oninput=function () {
screen.innerHTML=ipt.value
}
ipt.onchange=function () {
console.log(111)
screen.innerHTML=ipt.value
}
ipt.onblur=function () {
console.log(111)
screen.innerHTML=ipt.value
}
```
## /js-扩展-字符串
```text
### 字符串的声明
js
let str1=''
let str2=""
let str3=`是Es6的新语法`
### charAt()返回在指定位置的字符,空格也占位置,几乎不用,用str[3]来代替
js
let str4="I am a student!"
console.log( str4.charAt(3))
console.log(str4[3])
### concat 连接两个字符串,生成新的字符串,一般不用,用+号更好
js
console.log(str4.concat(str3))
### JavaScript奇技淫巧之快速把数字转换成字符串
js
let num=123
console.log(num+'')
### endsWith()与startsWith()
endsWith() 判断当前字符串是否已指定字符串结尾,区分大小写,返回布尔值
startsWith()判断当前字符串是否已指定字符串开头,区分大小写,返回布尔值
js
let str4="I am a student!"
console.log(str4.endsWith('nt!'))
console.log(str4.startsWith('I'))
### indexOf返回某字符串在当前字符串中首次出现的位置,如果没有,则返回 -1
let str4="I am a student!"
console.log(str4.indexOf('a'))
### lastIndexOf() 使用方法遇上相同,返回字符串在当前字符串中最后出现的位置
### includes 查找字符串中是否存在指定的字符串
js
let str4="I am a student!"
console.log(str4.includes('a'))
### match 查找到一个或多个正则表达式的匹配
js
let str4="I am a student!"
console.log(str4.match(/\ba\b/))//'\b'字符边界
console.log(str4.match(/a/g))
console.log(str4.match(/b/g))//不加g,查找到第一个结果就结束并输出,加了g,找到一个不结束,继续找,直到把所有满足条件的字符串都出找出来位置,如果找不到,则输出null
### repeat 复制字符串指定的次数,并连接在一起返回
js
let str4="I am a student!"
console.log(str4.repeat(3))
### replace在字符串中查找对应的子串,然后替换成新内容,生成新字符串,
js
let str4="I am a student!"
console.log(str4.replace("a",'b'))//正则后面可以加g,则所有满足条件的字符串都将被替换
### replaceAll
js
let str4="I am a student!"
console.log(str4.replaceAll("a",'b'))//不能用正则,所有a都将被替换
### search查找字符串中满足正则的字符串,返回索引
js
let str5="abcdeFG1234567higklmn"
console.log(str5.search(/\d{7}/))
### slice从字符串中截取某部分
js
let str5="abcdeFG1234567higklmn"
console.log(str5.slice(7,14))
### split以某字符为界限,切割字符串,生成新数组
js
let str5="abcdeFG1234567higklmn"
console.log(str5.split('')) //以空为界限切割字符串
### substring() 从字符串中提取指定两个索引间的字符串
js
let str5="abcdeFG1234567higklmn"
console.log(str5.substring(7,14))
### substr() 从字符串中,从指定位置,提取指定数量的字符串
js
let str5="abcdeFG1234567higklmn"
console.log(str5.substr(7,14))
### toLowerCase生成新字符串,把原来的所有字母改为小写
js
let str5="abcdeFG1234567higklmn"
console.log(str5.toLowerCase())
### toUppercase把原来的所有字母改为大写
js
let str5="abcdeFG1234567higklmn"
console.log(str5.toUpperCase())
### trime()去掉字符串两边的空格
js
let str6=' abc def '
console.log(str6.trim())
### toString,将元素变成字符串形式
js
let a =123
console.log(a.toString())
console.log(String(a))
console.log(a+'')//最简
```
## /js-扩展-字符串-练习
```text
### 写一个函数,可以生成随机的颜色
js
function randColor() {
return`rgb(${parseInt(Math.random()*256)},${parseInt(Math.random()*256)},${parseInt(Math.random()*256)})`
// return "rgb("+parseInt(Math.random()*256)+","+parseInt(Math.random()*256)+","+parseInt(Math.random()*256)+')'
}
list.style.background=randColor()
// list.style.color=randColor()
/* //相同颜色
let color=randColor()
list.style.background=color
list.style.color=color*/
```
## /js-扩展-数组方法
```text
### unshift前面添加,shift前面删除,push后面添加,pop后面删除,splice任意位置的添加和删除
### concat()连接两个或更多数组,并返回结果 , A.concat(B)
### copyWithin 从数组的指定位置拷贝元素到另一个指定位置
### every()判断数组中,是否所有元素都满足回调函数中的条件,满足返回true
js
let arr=[2,4,6,9,10]
console.log(arr.every(item =>item%2===0))
//能被4整除,不能被100整除,或者被400整除是闰年
let years=[2000,2004,2008]
console.log(years.every( item=> item%4===0&&item%100!==0||item%400===0))
### 过滤 筛选filter
js
let arr2=[1,2,3,4,5,6,7,8,9]
let arr3= arr2.filter(item=>item%2===1)//把元素组中所有满足此条件的元素组成新数组
console.log(arr3)
let arr4=arr3.map(item=>item*2)
console.log(arr4)
let total=arr4.reduce((pre,next)=>pre+next,0)
console.log(total)
#### 一行搞定,链式调用
js
let arr2=[1,2,3,4,5,6,7,8,9]
console.log(
arr2.filter(item=>item%2===1)
.map(item=>item*2)
.reduce((pre,next)=>pre+next,0)
)
#### 没有filter过滤,map映射,reduce等高阶函数时,我们要使用一下代码来实现上一行功能
js
let arr2=[1,2,3,4,5,6,7,8,9]
var brr=[]
for (var i =0;i<arr2.length;i++){
if(arr2[i]%2===1){
brr.push(arr2[i])
}
}
console.log(brr)
for(var i=0;i<brr.length;i++){
brr[i]=brr[i]*2
}
console.log(brr)
var result=0
for (var i =0 ;i<brr.length;i++){
result=result+brr[i]
}
console.log(result)
### typeof判断是否为字符串
js
console.log(typeof('123'==='string'))
let arr7=['a','b','c']
arr7.every(item=>typeof item==='string')
console.log(typeof typeof 123)//输出string
### find,判断数组中是否有某个值,如果是undefined则没有
js
let arr2=[1,2,3,4,5,6,7,8,9]
console.log(arr2)
console.log(arr2.find(item=>item===3))
const arr8=[
{account:123456, password:'abcdefg'},
{account:123457, password:'abcdefg'},
{account:123458, password:'abcdefg'},
{account:123459, password:'abcdefg'}
]
console.log(arr8.find(item=>item.account===123458))
### findIndex查找对应元素的索引
js
const arr8=[
{account:123456, password:'abcdefg'},
{account:123457, password:'abcdefg'},
{account:123458, password:'abcdefg'},
{account:123459, password:'abcdefg'}
]
console.log(arr8.findIndex(item=>item.account===123458))
### forEach跟map几乎一直,但是没有返回值,不能链式调用
js
let arr2=[1,2,3,4,5,6,7,8,9]
arr2.forEach((item,index)=>arr2[index] = item*2)
console.log(arr2)
### from
js
let arr2=[1,2,3,4,5,6,7,8,9]
arr2=Array.from(arr2,item=>item/2)
console.log(arr2)
### includes 判断数组中是否包含指定的值
### indexOf 搜索数组中的元素,并返回他所在位置
### lastIndexOf 返回他最后出现的位置
### isArray 判断是否是一个数组
js
const arr8=[
{account:123456, password:'abcdefg'},
{account:123457, password:'abcdefg'},
{account:123458, password:'abcdefg'},
{account:123459, password:'abcdefg'}
]
console.log(Array.isArray(arr8[0]))
### 判断是否为对象
js
const arr8=[
{account:123456, password:'abcdefg'},
{account:123457, password:'abcdefg'},
{account:123458, password:'abcdefg'},
{account:123459, password:'abcdefg'}
]
console.log(typeof arr8[0]==='object'&&arr8.length===undefined)
console.log(typeof arr8[0]==='object'&&!arr8.length)
//弱类型转换 null, undefined, '', NaN, 0 被转换证布尔值false
### join 数组转换字符串
js
let arr2=[1,2,3,4,5,6,7,8,9]
console.log( arr2.join())
### reverse 反转数组
js
let arr2=[1,2,3,4,5,6,7,8,9]
console.log(arr2.reverse())
### 反转字符串
js
let strA='a,b,c,d,e,f,g'
console.log(strA.split(',').reverse().join())
let strB='abcdefg' //gfedcba
console.log(strB.split('').reverse().join(''))
### map() 映射
### reduceRight() 从右往左计算
### slice() 选取数组中的一部分,返回新数组
### some() 检测数组中是否有元素符合条件,跟includes相同
### sort() 对数组元素排序
js
let arr9=['Banner','Orange','Apple','Mango']
arr9.sort()//默认按照字母升序排列
console.log(arr9)
let arr10=[8,7,45,3,9,97]
arr10.sort()//默认按照字母的升序排列
console.log(arr10)
//按照数字升序排列
arr10.sort((next,pre)=>next-pre)//下一个值减前一个值为正数
console.log(arr10)
//数字降序排列
arr10.sort((next,pre)=>pre-next)
console.log(arr10)
//数组乱序
let arr11=['a','b','c','d','e','f','g','h','i','j','k']
console.log(arr11.sort(()=>Math.random()-.5))
### toString()数组转字符串
```
## /js-扩展-Object对象
```text
### 一
js
let gender='男'
let obj1={
name:'小明',
age: 18,
hobbies:['吃饭','睡觉','打豆豆'],
able:function () {
console.log('正在学习')
},
gender
}
console.log(obj1.name)//最优
console.log(obj1['age'])
obj1.hobbies.map(item=>console.log(item))//map是有返回值的,会生成一个新数组
obj1.hobbies.forEach(item=>console.log(item))//更优
obj1.able()
### 二
js
function able(){
console.log('正在学习')
}
let gender='男'
let obj1={
name:'小明',
age: 18,
hobbies:['吃饭','睡觉','打豆豆'],
able,
gender
}
console.log(obj1.name)//最优
console.log(obj1['age'])
obj1.hobbies.map(item=>console.log(item))//map是有返回值的,会生成一个新数组
obj1.hobbies.forEach(item=>console.log(item))//更优
able()
```
## /js-扩展-作用域
```text
### var可以重复声明,let不可以
js
var test=1//var可以重复声明,let不可以
var test=2
var j=3
for (var j=0;j<arr11.length;j++){
console.log(j)//内存泄漏
}
console.log(j)
let test2=1
// let test2=1 //let 不允许重复声明
### 作用域: 全局作用域/ 局部作用域/ es6新增块级作用域
js
let m=3
for (let m=0;m<arr11.length;m++){}
console.log(m)//3
js
var n=1
function xxx() {
console.log(n)//undefined暂时性死区,作用域内一旦var/let声明了某变量,那么此作用域就不会查找该变量
var n=2//var 存在变量提升,作用域内后面声明了变量,则在前面也可以使用之,只不过其值为undefined
console.log(n)//2
}
xxx()
console.log(n)//2
js
let x=1
function yyy() {
console.log(x)//1
x=2
console.log(x)//2
}
yyy()
console.log(x)//2
js
let p=1
function ppp() {
console.log(p)//p在这里不存在,不是undefined,但是由于局部作用域内声明了p,所以暂时性死区,不会像外界获取p,**会直接报错**
let p=2//let不存在变量提升
console.log(p)//
}
ppp()
console.log()//
```
js拓展-Dom与事件,字符串,数组方法,object对象,作用域的更多相关文章
- JS获取DOM元素的八种方法
JS获取DOM元素的方法(8种) 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTagName) 通过类名 ...
- JS 操作符、控制流程、循环、字符串/数组方法
操作符 算术运算符:+ .- . * . / . %.++.-- 赋值运算符:= .+=.-=. *=./=.%= 比较运算符:>.>=.<.<=.!=.==.===(全等,数 ...
- JS中的事件、数组、节点对象处理
在JS代码中编写事件一定要保证页面在浏览器中加载时会把事件加载进页面 事件:在代码中可以通过一个动作来触发另一个行为的总称 A:事件的编写方式1 HTML标签中添加 onxxxx = "函数 ...
- js之DOM和事件
DOM 查找 直接查找 var obj = document.getElementById('i1') 间接查找 文件内容操作: innerText 仅文本 innerHTML 全内容 value i ...
- js中常用的操作字符串的方法大全
charCodeAt()返回一个整数,代表指定字符的Unicode编码 fromCharCode()从一些Unicode字符串得到一个字符串 charAt()根据指定下标位置返回对应字符,如果下标超 ...
- js --- 关于DOM的事件操作
一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...
- DOM中事件绑定补充方法
先将上一篇文章中提到的为元素增加事件的方法和移除事件的方法拿过来: <span style="font-size:18px;">//跨浏览器添加事件 function ...
- 使用js在HTML中自定义字符串格式化方法
Python中支持字符串格式化,其基本形式如下: str = "I'm {name},{age} years old" print(str.format(name="te ...
- 适合MCU用的C语言快速互转HEX(16进制)和原始字符串/数组方法
缘由 这个起因是昨晚群里有人在讨论怎么把字符串转成HEX方法最佳,讨论到最后变成哪种方法效率最优了.毕竟这代码是要在MCU上面跑的,要同时考虑到时间和空间的最优解. 当然讨论的是有结果的,具体实现的方 ...
- es6新增的数组方法和对象
es6新增的遍历数组的方法,后面都会用这个方法来遍历数组,或者对象,还有set,map let arr=[1,2,3,4,3,2,1,2]; 遍历数组最简洁直接的方法法 for (let value ...
随机推荐
- Nginx反代服务器进阶学习最佳配置实践指南
转载自:https://www.bilibili.com/read/cv16150010?spm_id_from=333.999.0.0 0x00 编译实践 描述:在企业线上生产环境中推荐进行Ngin ...
- 查询参数和字符串校验:Query_Parameters_and_String_Validations
官方文档地址:https://fastapi.tiangolo.com/zh/tutorial/query-params-str-validations/ # -*- coding: UTF-8 -* ...
- 第一个Django应用 - 第三部分:Django视图和模板
一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模板.例如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...
- Fluentd部署:错误排查
介绍一下排查Fluentd运行时错误的几种方法. 查看日志 如果感觉Fluentd运行异常,请先查看日志.td-agent安装后,默认日志存放在/var/log/td-agent/td-agent.l ...
- Java导出带格式的Excel数据到Word表格
前言 在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档.在本文中,您将学习如何使用 ...
- 如何理解「数字化是 IT 公司在给传统企业贩卖焦虑」?
焦虑,不是IT公司贩卖给传统企业的!这个论断本身就不成立!数字化的动因是企业内部,生产中的七大浪费还不够么?数据不畅导致的决策失败还少吗?去问下企业业主,诸如此类的问题多了去了,数字化服务商只是来帮着 ...
- MybatisPlus生成主键策略方法
MybatisPlus生成主键策略方法 全局id生成策略[因为是全局id所以不推荐] SpringBoot集成Mybatis-Plus 在yaml配置文件中添加MP配置 mybatis-plus: g ...
- 开源动态可监控线程池DynamicTp介绍
前言 使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢? 代码中创建了一个 ThreadPoolExecutor,但是不知道那几个核心参数设置多少比较合适 凭经验设置参数值, ...
- go-zero docker-compose 搭建课件服务(三):编写courseware api服务
0.转载 go-zero docker-compose 搭建课件服务(三):编写courseware api服务 0.1源码地址 https://github.com/liuyuede123/go-z ...
- 微服务组件--注册中心Spring Cloud Eureka分析
Eureka核心功能点 [1]服务注册(register):Eureka Client会通过发送REST请求的方式向Eureka Server注册自己的服务,提供自身的元数据,比如ip地址.端口.运行 ...