首页 > 编程语言 >JavaScript学习笔记

JavaScript学习笔记

时间:2023-03-23 15:11:51浏览次数:49  
标签:JavaScript console log classList 元素 笔记 学习 Boolean true

JavaScript学习笔记

 

 

 

 

 

 

操作属性

 

 

获取标签

querySelector(‘CSS选择器’)返回一个元素对象,可以直接操作;找不到返回null;

querySelectorAll(‘CSS选择器’)返回一个伪数组,需要遍历得到对象再操作;

注意:参数必须加引号(字符串),参数必须是CSS选择器;

伪数组:没有pop、push等方法,但是可以遍历;

inner

元素.innerText属性,元素.innerHTML属性;

innerText只识别文本,不解析标签;

innerHTML能识别文本,也能解析标签;(推荐

style

对象.style.样式属性=值

const box=document.querySelector(‘.box’)

box.style.width=’200px’

box.style.marginTop=’15px’

box.style.backgroundColr=’pink’

修改样式属性,通过style属性引出;样式属性都放在style属性中;

如果属性名有-连接符,需要转换为小驼峰命名法;

赋值时,需要带单位px;

className

 className配合样式进行使用,通过修改className,就匹配到对应的样式;

className只适用于单类名,而不适用于多类名;多类名用classList进行操作;

.c1 {color: red;}   .c2 {color: blue;}

<h1 class="c1">这里是标题</h1>

const h1 = document.querySelector('h1')//查询获取元素对象

h1.innerHTML = '新设置的标题'//修改元素属性,从而修改文本内容

h1.className='c2'//修改类名,从而修改样式

classList

为了解决className容易覆盖原值的情况,可以通过classList追加和删除类名;

元素.classList.add(‘类名’)//追加一个类;

元素.classList.remove(‘类名’)//删除一个类;

元素.classList.toggle(‘类名’)//添加或删除一个类;

如果classList中没有这个类名,就是添加,并返回true;

如果classList中有这个类名,就是删除,并返回false;

classList toggle() 方法说明

该classList.toggle()方法允许您根据当前class属性值添加或删除类名。

如果要切换的类名已经存在于元素中,则该toggle()方法将删除该类名,反之亦然。

您可以通过它返回的值知道该toggle()方法是否添加或删除了一个类。如果类名被删除,toggle()将返回false. 添加类名后,将返回true.

自定义属性

 

html5中推出的自定义属性data-自定义属性名;

DOM对象上以dataset对象方式获取自定义属性;

例如,定义用data-id获取用dataset.id

<div class=”box” data-id=”10”>盒子</div>

<script>

const box=document.querySelector(‘.box’)

console.log(box.dataset.id)

</script>

 

 

 

 

window.定时器

延时函数

一定时间后,执行某个操作,只执行一次;

 

let timer=setTimeout(回调函数,等待毫秒数)

clearTimeout(timer)清除

间歇函数

每间隔一定时间,执行一次回调函数;

let timer=setInterval(回调函数,间隔毫秒数)

clearInterval(timer)清除

函数名字不需要加括号,定时器返回的是一个id数字;

function(){console.log(‘每秒执行一次’)}

setInterval(fn,1000)//fn不需要小括号,时间单位是毫秒;

元素位置尺寸

获取宽高

offsetWidth,offsetHeight;

获取元素自身的宽度和高度,包含padding,border;

得到的是数值方便计算;

获取的是可视宽高,如果盒子隐藏,结果为0;

获取位置

offsetLeft,offsetTop是只读属性

元素距离父元素的左侧和上侧的距离;

获取宽高

clientWidth,clientHeight;

获取可见部分宽高,不包含边框、margin、滚动条;

获取位置

scrollLeft,scrollTop;可读可写

获取被卷去的大小;

获取元素滚出去(看不到)的距离;

事件分类

事件总结

resize

window.addEventListener(‘resize’,funciton(){//要执行的操作

let w=document.documentElement.clientWidth})

scroll

window.addEventListener(‘scroll’,function(){//要执行的操作})

load

监听整个页面资源加载情况;也可以监听某个元素的加载情况;

window.addEventListener(‘load’,function(){//要执行的操作})

img.addEventListener(‘load’,function(){//要执行的操作})

DOMContentLoaded

只是加载DOM元素,而不包含样式表、图片等;

事件委托

事件委托:利用事件流特征,解决一些开发需求的技巧;

优点:减少注册次数,提高程序性能;

原理:利用事件冒泡特点;

给父元素注册事件,当我们触发子元素的时候,会冒泡到父元素身上,从而触发父元素的事件;

ul.addEventListener(‘click’,function(){})

鼠标经过事件

mouseover,mouseout会有冒泡效果;

mouseenter,mouseleave没有冒泡效果;(推荐

解绑事件

function fn(){}

btn.addEventListener(‘click’,fn)

btn.removeEventListener(‘click’,fn)

匿名函数无法解绑;

阻止冒泡

默认冒泡,容易导致事件影响到父级元素;

把事件限制在当前元素内,需要阻止事件冒泡;

前提:需要拿到当前事件对象;

事件对象.stopPropagation()

键盘事件

keyup,keydown;

tx.addEventListener(‘keyup’,function(e){

if(e.key===’Enter’){item.style.display=’block’   }})

事件捕获(父→子)和事件冒泡(子→父)

阻止

阻止冒泡

事件对象.stopPropagation();

将事件局限在本对象范围内,而不会传递到父对象;

阻止默认行为

e.preventDefault();

阻止元素的默认行为,例如链接的跳转,表单的submit等;

 

日期时间

时间戳

时间戳:1970年1月1日0时0分0秒起至今的毫秒数;

const last=new Date(‘2022-5-1 18:30:00’);返回字符串形式的时间戳;毫秒数

const now=new Date()返回字符串形式的当前时间戳;

+new Date()将字符串转换为数字形式;

const date=new Date() ;//实例化日期对象

date对象:月份0-11星期0-6;

date.getTime();获取当前时间戳;

Date.now()当前时间戳,无需实例化;

 

日期对象

const date=new Date() ;//实例化日期对象

getFullYear,getMonth获取月份:0-11,getDate,getDay获取星期:0-6

getHours:0-23,getMinutes:0-59,getSeconds:0-59;

 

 

 

节点操作

查找节点

节点关系:父子关系、兄弟关系;

父元素.children()获取所有元素节点,返回一个伪数组;

伪数组:没有普通数组的一些方法pop等;

childNodes获得所有子节点,包括文本节点(空格、换行),注释节点等;

兄弟节点:

nextElementSibling上一个兄弟,previousElementSibling下一个兄弟

子元素.parentNode,查找父元素节点;

创建节点

document.createElement(‘标签名’)

document.createElement(‘div’)

const ul=document.querySelector(‘ul’)

const li=document.createElement(‘li’)

li.innerHTML=’我是li’

 

添加节点

//父元素.appendChild(要插入的元素),插入到所有子元素尾部

ul.appendChild(li)

//父元素.insertBefore(要插入的元素,放在哪个子元素前面)

ul.insertBefore(li,ul.children[0])

ul.appendChild(li)

克隆节点

复制一个节点,将节点放到指定元素内部;

元素.cloneNode(Boolean);

true表示克隆所有后代节点,false表示不克隆后代节点;默认false;

删除节点

删除元素必须通过其父元素;没有父子关系的无法删除;

父元素.removeChild(要删除的节点元素)

ul.removeChile(ul.children[0])

 

手机端事件

touchstart手指触摸一个DOM元素时触发;

touchend,手指从一个DOM元素离开时触发;

touchmove手指在一个DOM元素上滑动时触发;

window下面的对象

history对象

管理浏览器的历史记录;

back后退;forward前进;go(参数)参数1前进,-1后退;

navigator

记录浏览器相关信息;

可以根据不同的浏览器执行区别化的操作,使得适应性更强;

navigator.userAgent : 浏览器用于 HTTP 请求的用户代理头的值,通过UserAgent可以取得浏览器类别、版本,客户端操作系统等信息。

在PC端打开 ,navigator.userAgent 显示如下

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36

在手机web端打开 ,navigator.userAgent 显示如下

Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1

 

location

存储当前页面的url,可以通过修改href,让当前页面进行跳转;

location.href=’http://www.baidu.com’

 

 

 

 

持久化存储:localStorage

永久存储键值对,除非手动删除;多个窗口/页面可以共享,同一浏览器可以共享;页面刷新不丢失;

简单类型

localStorage.setItem(‘uname’,’齐天大圣’)

localStorage.getItem(‘uname’)

 

复杂类型

obj={name:’李四’,age:18,gender:’男’}

localStorage.setItem(‘obj’,JSON.stringify(obj))//先转化为json字符串,然后存储到localStorage

const newObj=JSON.parse(localStorage.getItem(‘obj’))//先读取json字符串,然后解析为js对象

临时性存储:sessionStorage

声明周期为关闭浏览器窗口;

再同一个窗口(页面)下数据可以共享;

以键值对的形式存储;

使用方法同localStorage;

 

 

 

数组方法总结

map

数组的map方法:将数组中的元素按照规则映射为一个新数组,并返回;

const arr=[‘red’,’blue’,’green’]

const newArr=arr.map(function(element,index){return element+’颜色’;})

 

 

forEach

数组中的forEach方法,遍历数组元素;

 

join

数组中的join方法:将数组中的元素连接 成一个字符串;

 

 

 

document.body.style.backgroundImage=`url(./images/desktop_${random}.jpg)`

innerHTML()解析传入字符串中的html标签;

innerText()不解析字符串中的html标签;

document.querySelectorAll(‘.box’);选择所有匹配项;

找到就返回数组(伪数组),有长度length,但是没有pop,push方法;

document.querySelector(‘div’);只选择第一个匹配项;找到就返回一个对象,找不到就返回null;

随机数

一般浮点数

Math.random()随机数[0,1)浮点数

Math.random()*11随机数[0,11)浮点数

 

0-end整数

Math.floor(Math.random()*(end+1))

start-end整数

Math.floor(math.random()*(end-start+1)+start)

 

对象属性的增删改查:

  • 删:delete stu.name;
  • 改:已有的属性直接赋值;
  • 增:没有的属性直接赋值;
  • 查1:用.运算符;
  • 查2:用中括号[‘’];

classList、querySelector

 const h2 = document.querySelector('h2')         console.log(h2.classList)//DOMTokenList(2) ['b1', 'c1', value: 'b1 c1']         h2.classList.remove('b1')//移除b1类         console.log(h2.classList)//DOMTokenList(1) ['c1', value: 'c1']         h2.classList.add('b2')//添加b2类         console.log(h2.classList)//DOMTokenList(2) ['c1', 'b2', value: 'c1 b2']         h2.classList.toggle('c2')//添加或删除         console.log(h2.classList)//DOMTokenList(3) ['c1', 'b2', 'c2', value: 'c1 b2 c2']         // 如果classList中没有这个类名,就是添加,并返回true;         // 如果classList中有这个类名,就是删除,并返回false;

        const h1 = document.querySelector('h1')         h1.innerHTML = '新设置的标题'         h1.className = 'c2'
        // const h1 = document.querySelector('h1')         // console.log(h1)//h1对象         // const h2 = document.querySelector('h2')         // console.log(h2)//null 找不到对象,就返回null         // const lis1 = document.querySelectorAll('.list1 li')         // console.log(lis1)//NodeList(4) [li, li, li, li]         // const lis2 = document.querySelectorAll('list2 li')         // console.log(lis2)//NodeList(0) [], 找不到,就返回空数组(伪数组)         // const lis3 = document.querySelectorAll('list3 li')         // console.log(lis3)//NodeList(0) [], 找不到,就返回空数组(伪数组)

数据类型、布尔值、逻辑中断

 //■数据类型         // let num = 10         // console.log(typeof num)//number         // console.log(typeof (num))//number         // let str = 'hello'         // console.log(typeof str)//string         // console.log(typeof (str))//string         // let flag = true         // console.log(typeof flag)//boolean         // console.log(typeof (flag))//boolean         // let un         // console.log(typeof un)//undefined         // console.log(typeof (un))//undefined         // let obj = null         // console.log(typeof obj)//object         // console.log(typeof (ojb))//undefined         // let nan = NaN         // console.log(typeof nan)//number         // console.log(typeof (nan))//number
        //■布尔值         // console.log('-----builtin-----')         // console.log(Boolean(true))//true         // console.log(Boolean(false))//false         // console.log(Boolean(undefined))//false         // console.log(Boolean(null))//false         // console.log(Boolean(NaN))//false         // console.log('-----number-----')         // console.log(Boolean(100))//true         // console.log(Boolean(3.14))//true         // console.log(Boolean(0.00))//false         // console.log(Boolean(0))//false         // console.log(Boolean(-0.00))//false         // console.log('-----string-----')         // console.log(Boolean('hello'))//true         // console.log(Boolean('true'))//true         // console.log(Boolean('false'))//true         // console.log(Boolean('null'))//true         // console.log(Boolean('undefined'))//true         // console.log(Boolean('0'))//true         // console.log(Boolean(''))//false         // console.log('-----array-----')         // console.log(Boolean([1, 2, 3]))//true         // console.log(Boolean([0, 0, 0]))//true         // console.log(Boolean([]))//true         // console.log('-----object-----')         // console.log(Boolean({ name: 'tom' }))//true         // console.log(Boolean({}))//true
        //■逻辑中断         console.log(22 || 33)//22         console.log(0 || 33)//33         console.log(22 && 33)//33         console.log(0 && 33)//0         console.log('res' || 'default')//res         console.log('' || 'default')//default   //■显式类型转换         console.log('-----Number-----')         console.log(Number('22'))//22 转换成功         console.log(Number('.22'))//.22 转换成功         console.log(Number('22.33'))//22.33 转换成功         console.log(Number('22.33.44'))//22.33 转换成功         console.log(Number('22aa'))//NaN 转换失败 结果肯定不是数字,具体是什么不知道         console.log(Number('22啊啊'))//NaN 转换失败 结果肯定不是数字,具体是什么不知道         console.log(Number('啊啊22'))//NaN 转换失败 结果肯定不是数字,具体是什么不知道         //所有字符只能是数字或者小数点,不能有其他字符,才能转换成功;         console.log('-----parseInt-----')         console.log(parseInt('88'))//88 转换成功 只取前面的数字部分         console.log(parseInt('88.44'))//88 转换成功 只取前面的数字部分         console.log(parseInt('88哈哈'))//88 转换成功 只取前面的数字部分         console.log(parseInt('88.56px'))//88 转换成功 只取前面的数字部分         console.log(parseInt('.88'))//NaN 转换失败 结果肯定不是数字,具体是什么不知道         console.log(parseInt('px88.56')) //NaN 转换失败 结果肯定不是数字,具体是什么不知道         //必须数字开头,才能转换成功,否则失败         console.log('----------')         console.log(parseFloat('88'))//88         console.log(parseFloat('88.44'))//88.44 从前面开始,数字和小数点         console.log(parseFloat('88哈哈')) // 88         console.log(parseFloat('88.56px'))//88.56 从前面开始,数字和小数点         console.log(parseFloat('px88.56'))//NaN 转换失败 结果肯定不是数字,具体是什么不知道         console.log(parseFloat('88.44.55.66'))//88.44         console.log(parseFloat('.44.55.66'))//0.44         //以数字或小数点开头,就能转换成功,否则失败;           console.log('-----+-----')         console.log(+'88')//88         console.log(+'88.44')//88.44         console.log(+'88哈哈')//NaN         console.log(+'88.56')//88.56         console.log(+'88.56px')//NaN         console.log(+'px88.56px')//NaN         console.log(+'.88')//0.88         console.log(+'.88.56')//NaN         console.log(+'.88px')//NaN         console.log(+'3.1.4')//NaN         //必须全部是数字或小数点,并且小数点个数不能超过1个,才能转换成功;
  

数据类型转换

数据类型转换

隐式转换

+两边只要有一个字符串,会把另个一转换为字符串;‘1’+1=‘11’;

+以外的算术运算符,会把数据转换成数字;‘22’/2=11;

任何数字和字符串相加,结果都是字符串;

+作为正号可以将字符串转换为数字;(有用

显式转换

+,Number(),parseInt(),parseFloat()

var a1 = parseFloat("100.456啊啊啊");//a的结果为100

var b1 = parseFloat("1.2xxx")//b的结果为1.2

l + //必须全部是数字或小数点,并且小数点个数不能超过1个,才能转换成功;

l parseFloat //以数字或小数点开头,就能转换成功,否则失败;

l parseInt //必须数字开头,才能转换成功,否则失败;

l Number //所有字符只能是数字或者小数点,可以有多个小数点,不能有其他字符,才能转换成功;

 

#end

标签:JavaScript,console,log,classList,元素,笔记,学习,Boolean,true
From: https://www.cnblogs.com/zhangdezhang/p/17247320.html

相关文章

  • Cadence入门笔记(八):DRC、钻孔图和光绘Gerber
    DRCAllegro中的设计规则检查DRC用于检测PCB设计中有无违法设计规则的地方,其中Online模式为边设计边实时更新检查结果,Batch模式为设计完成后手动更新一版检查结果。一般在......
  • CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
    网上查应该是node导致的内存溢出,64位电脑默认1.4G,32位电脑默认0.7G在package.json中的Scripts中添加node的参数 "scripts":{  "serve":"node--max_old_s......
  • 2023.3.22学习记录
    p7:TensorBoard的使用(一)#p7:TensorBoard的使用(一)fromtorch.utils.tensorboardimportSummaryWriter#1.创建日志文件writer=SummaryWriter("logs0321")#writer.......
  • 2023.3.21学习记录
    图像超分辨率技术一.传统图像超分辨率技术,主要包括1.基于插值的技术(最近邻插值,双线性插值,双三次插值)2.基于重建的方法(主要使用数学中概率论和集合论的方法包括,......
  • matlab学习笔记5 求导&数值微分&求根
    求导&偏导diff(f(x),x,n)//关于x的n阶导数jacobian([f(x,y,z),g(x,y,z),h(x,y,z)],[x,y,z])//求雅克比矩阵factor(f(x))//分解成多项式相乘用雅克比矩阵可求出二阶偏......
  • Java初学者推荐学习书籍free下载
    场景Java是由SunMicrosystems公司于1995年5月推出的高级程序设计语言。Java可运行于多个平台,如Windows,MacOS,及其他多种UNIX版本的系统。Java分为三个体系:JavaSE(J2SE)(Jav......
  • 判断Javascript变量类型的函数
    toString本来是用来做字符串转换的,不过现在流行用来做变量类型的检查了。这里也的一个函数,方便检查变量的类型,可以用来代替typeof functiongetType(o){var_t;re......
  • 产品经理笔记5——什么是CRM
    究竟什么是CRM?客户关系管理(CustomerRelationshipManagement,简称CRM),是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上......
  • 机器学习算法(四): 基于支持向量机的分类预测
    机器学习算法(四):基于支持向量机的分类预测1.相关流程支持向量机(SupportVectorMachine,SVM)是一个非常优雅的算法,具有非常完善的数学理论,常用于数据分类,也可以用于数据的......
  • 产品经理笔记4——什么是SaaS
    SaaS即Software-as-a-service(软件即服务)的缩写,指提供商为企业搭建信息化所需要的所有网络基础设施网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等......