Javascript学习点滴

tech2022-08-03  135

                                     Javascript 学习点滴

数据类型:

数值型字符串布尔型nullundefined

变量:

提示:变量是没有类型或者说弱类型的 var:typeof(x) 获取变量类型


运算符:

===: 等同判断,内容和类型都相同 ==: 值相等就可以,如 '5' 和 5相等


循环:

var fruits = ['apple', 'banana', 'orange']; 常规:

for(var index in fruits){ console.log(fruits[index]); }

Infinity:

Infinity是全局对象 global object 的一个属性

NaN:

是一个全局对象的属性, 其值就是NaN不能通过 == 判断是否一个值是NaN

必须使用Number.isNaN(value)来判断或者isNaN(value)

undefined:

是全局对象的一个属性,一个没有被赋值的变量类型是undefined, 一个函数如果没有返回值,就会返回一个undefined值

null:

null是一个字面量


创建对象:

new Object(); 或者 var obj = { name:"laoli", age:25, say:function(){ return "dfsfd"; } //以逗号隔开 }

  

创建数组:

new Array(); new Array(size) new Array(e0,e1,e3,...en) var arr = [3,2,..3]

   遍历

for (var i in arr){ alert(arr[i]); }

  添加元素

attr.push(100);

javascript全局方法:

encodeURI( str ): 不会对ASCII 字母和数字进行编码, - _ . ! ~ * ' ( )  encodeURIComponent( str ): SCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的


javascript基本对象:

Object:  javascript中几乎所有的对象都是Object的实例,所有的对象都继承了Object.prototype的属性和方法 Function: javascript 中,每个函数实际上都是一个Function对象

Array: 数组 对象

     .length 获得数组的长度      .concat 连接内容或者数据,组成新的数组      .join(n)用n连接数组的每一项组成字符串,可以是空字符串      .pop() 删除数组的最后一项数据,并返回删除的数据      .push() 在数组最后加入新的内容返回新的数组长度      .reverse() 反转数组

遍历数组 var a = ["1","2","44"]; a.forEach( function(item,index,array) { alert(item); ); 数组操作: 添加数组元素到末尾 var length = a.push("value"); 删除数组末尾元素 var obj = a.pop(); 删除数组最前面的元素 a.shift(); 添加到数组的最前端 a.unshift("value"); 找到某个元素在数组中的索引 a.indexOf("value"); 删除某个位置的元素 a.splice(2,1) 删除索引为2的位置的一项 array.splice(start) array.splice(start, deleteCount) array.splice(start, deleteCount, item1, item2, ...) 复制数组 a.slice(start,end) 选择数组的一部分浅拷贝到一个新数组对象,原始数组不会改变,不包括end

String: 字符串对象

.length 获得字符串的长度 .charAt(n) 找到索引位置上的字符 .charCodeAt(n) 找到索引位置上的字符的编码 .indexOf("m") 找到字符m在字符串中最后一次出现的索引,如果没有找到返回-1 .split(“n”)以字符n分隔字符串,并返回一个数组,空字符串时分隔每个字符 .substr(n,m) 截取字符串,从索引n开始截取,截取到m个字符(m取不到) .toLowerCase() 把字符串中的字母转化成小写 .toUpperCase() 把字符串中的字母转化成大写

Math: Math对象

.pow .abs round floor ceil random

Date: Date对象

Event: Event对象

Window: Window对象

alert window.confirm("xxx") 确认框 window.prompt("请输入")输入框 window.open("ad.html");

navigator对象: 获得浏览器信息 location对象: location.href=xxx.html; history对象: 回退,前进  


   

事件:

什么是事件:可以被js检测到的行为,本质上是一种交互操作

事件的作用:

       各个元素之间可以借助事件来进行交互       用户和页面之间也可以通过事件类交互       后端和页面之间也可以通过事件来交互

事件的传递:

         事件不仅能够和触发者交互,还能在特定的情况下沿着dom tree逐级传递         和dom tree中的各个节点进行交互,称为事件传递机制

事件的传递方式:        事件冒泡:从具体到不具体,逐级向上,子和父都绑定了相同的事件

       事件捕获: 从不具体到具体,逐级向下

事件绑定:        非IE事件绑定

 

on + 事件 = '函数();函数();',执行的顺序是绑定时函数书写的顺序 事件采用冒泡机制 <div onclick="test();test1();"></div> 意味着可以绑定多个相同的事件 事件的移除 元素.setAttribute('on+事件名', null);如d1.setAttribute('onclick',null); 事件移除后,仍然会事件传递 html事件缺陷:耦合性太强了,修改一处另一处也要修改-如修改函数名 当函数没有加载成功,用户去触发事件,则会报错

DOM0级事件:

在js脚本中直接通过 on + 事件名 绑定的事件,元素.on+事件名 = function(){}

以冒泡机制来处理事件,不存在兼容问题

一个元素的多个相同事件,会被覆盖,按最后一个 意味着同一元素不能绑定多个相同的事件

 

DOM2级事件:

在js脚本中,通过addEventListener函数绑定的事件

元素.addEventListener(type,listender,useCapture) type 事件类型 listener 监听函数 useCapture 是否使用捕获,默认false,即冒泡机制 DOM2级事件可以绑定多个函数,执行顺序按函数书写顺序 btn.addEventListener('click',function(){//a},true); btn.addEventListener('click',function(){//b},true); var div = document.querySelector('div'); div.addEventListener('click',function() { console.log('div点击了'); },false); 如果设置useCapture为true,则事件传递由dom tree的上层开始执行事件,最终到具体元素事件

事件绑定:        IE事件绑定

        HTML事件处理程序:等同于非IE事件绑定        DOM0级事件:等同于非IE        DOM2级事件:通过attachEvent函数绑定事件 元素.attachEvent(type,listener) type:事件类型 有on listener 监听函数 如果绑定多个函数,按照函数书写的倒叙执行(IE8是这样) btn.attachEvent('onclick',function(){}); IE9-11支持 btn.addEventListener,不支持attachEvent IE11绑定EventListener按照函数书写的顺序执行 事件的移除 元素.detachEvent(type,listener) 匿名函数无法移除 d1.detachEvent('onclick',test);

事件的浏览器兼容 

<script type="text/javascript"> var eventObj = { addEvent:function(ele, type, listener){ if (ele.addEventListener) {//判断是否有该属性 console.log('event listener'); ele.addEventListener(type,listener); }else { console.log('event'); ele.attachEvent('on'+type, listener); } }, removeEvent:function(ele,type,listener) { if (ele.removeEventListener) { ele.removeEventListener(type,listener); }else { ele.detachEvent('on'+type, listener); } } } function test() { eventObj.removeEvent(div,'click',test) console.log('test'); } var div = document.querySelector('div'); eventObj.addEvent(div,'click',test); </script>

鼠标事件类型

    click 鼠标点击    dblclick  双击事件,双击事件会触发单击事件    mousedown 鼠标按下,会触发单击事件    mounseup 鼠标抬起     mounsemove 鼠标移动    mouseenter 鼠标移入(不冒泡)    mouseleave 鼠标移出(不冒泡) 元素.on事件 = function(){ } 元素.addEventListener('事件',function(){});

Event

    保存事件发生时的相关信息     event是一个容器,存放触发的事件本身,可作为形参给函数

    event.clientX  事件发生时的X坐标    event.clientY 事件发生时Y的坐标    event.target 事件源     event.type 事件类型    event.bubbles 是否当前事件是否支持冒泡,与是否使用冒泡无关        event.eventPhase 事件传导至当前节点时,处于什么状态        1 事件处于捕获状态        2 事件处于真正的触发者        3 事件处于冒泡状态        event.target 返回事件真正的触发者    event.currentTarget 返回事件的监听者,触发的事件绑定到了哪个节点,就返回谁    event.stopPropagation() 阻止事件从当前节点传播到下一个节点,不会影响同一节点上的其他事件句柄    event.preventDefault() 取消当前节点的默认行为,如超链接的点击跳转行为,该方法没有返回值 a_link.onclick = function(){ event.preventDefault(); }

    event.cancelable 属性用来判断当前节点能否使用preventDefault方法来取消默认行为     如果可以返回true,否则返回false

a_link.click = function(){ console.log(event.cancelable); }

IE event 对象常用方法属性

    非IE下event的值默认为undefined,而IE中event的值默认为null

    非IE下可以通过DOM0或DOM2的参数来使用event,     而IE中DOM0无法使用传参的形式来使用event(可以直接用event),DOM2可以

兼容性解决 e为传参 var eve = e||window.event; srcElement 属性 事件真正的触发者,等同于非IE下的target var target = eve.srcElement||eve.target; cancelBubble属性 阻止事件在当前节点上的冒泡行为,类似非IE下的stopPropagation stopPropagation阻断事件传递,而cancelBubble属性则阻断事件冒泡 event.cancelBubble = true 取消冒泡 returnValue属性 设置是否取消当前节点的默认行为 作用类似于非IE下的preventDefault方法 event.returnValue = false 取消默认行为

文档事件 - 焦点事件

    加载成功 load、error     dom加载成功时 domcontentloaded     页面卸载 beforeunload     文档加载状态判断时间 readystatechange     文档大小发生改变时的回调事件 resize

    load 节点加载成功     error 节点加载失败

load 

在head中为页面元素添加点击事件,通过window得onload事件 解决了,由于网页加载未完成,而获取到的页面元素失败问题

整个页面加载完成才会执行 window.onload = function() { var div = document.querySelector("#someid"); div.onclick = function(){} }

documentloaded 

先执行domcontentloaded,后执行 load

beforeunload: 页面卸载:离开,刷新,关闭页面

window.onbeforeunload = function() { event.returnValue=''; return '是否离开'; }

readystatechange

文档加载状态判断,用于在网页的刷新等, 当document的readyState改变时触发

document 节点中拥有一个属性readyState     有三个可能的值:

        loading 加载外部资源        interactive 加载外部资源        complete 加载完成

    有两次状态改变,也就是会触发两次

document.onreadystatechange = function() { console.log(document.readyState); }

resize 

文档大小发生改变

window.onresize = function(){ }

焦点事件

常用在表单中的验证,如设置span(初始display:none)     获得焦点时 span提示框 display = 'inline-block'     innerText = '提示内容'

    失去焦点时,验证加span提示

    正在和用户交互的节点称为焦点     blur 失去焦点     focus 获得焦点          两个事件,均不支持冒泡,仅在当前节点触发     绑定 addEventListener;on+事件

滚动事件

scroll事件会在【文档或元素】发生滚动操作时触发

    属性scrollTop,scrollLeft 可读写,表示文档滚动的距离(没有单位)

    IE document.documentElement.scrollTop/Left     非IE document.body.scrollTop/Left

window.onscroll = function(){ var top = document.body.scrollTop|document.documentElement.scrollTop; var left = document.body.scrollLeft|document.documentElement.scrollLeft; console.log(top + left ); } 对于文档 scrollTop/Left 表示滚动的距离,没有单位 设置 document.body.scrollTop||document.documentElement.scrollTop btn.onclick = function() { timer = setInterval(function(){//使用定时器 //获取滚动条到顶部的举例 var distance = document.body.scrollTop||document.documentElement.scrollTop; distance = distance*0.8; document.body.scrollTop = distance; document.documentElement.scrollTop = distance; if (distance == 0) {//如果滚动条到顶部,则停止 clearInterval(timer); } },50); }

键盘事件

keypress 键盘按下一次,按住不放,事件会被连续触发keydown 按键按下,按住不放,事件会被连续触发keyup 按键抬起    

    键盘事件支持事件冒泡,因此可以将键盘事件绑定到具体触发者的父级上

    判断按了什么键,常见的回车13,空格8     event.keyCode 编值码

name1.addEventListener('keydown',function(event) { console.log('执行'); console.log(event.keyCode); }) pass.onkeydown = function() { console.log('执行'); console.log(event.keyCode); }

keydown和keypress 的区别

        keypress只要用来捕获:数字(包括shift+数字)、字母(大小写),小键盘等         能够显示在屏幕上的字符,但不能对功能键 的正常响应                  keydown和keyup通常可以捕获键盘除了PrScrn所有按键

        捕获长度             keypress 只能捕获单个字符             keydown和keyup可以捕获组合键

        在keyCode上         keydown,keyup 获取的是字母的大写的编码         keypress获取的是字母本身的编码,如a,前者就是65,或者是97

        所有功能按键,如ALT,ENTER都不能被keypress识别,只能被keydown识别

        keypress不区分主键盘和小键盘数字字符         keydown和keyup区分

触摸事件 

    touchstart 手指触摸屏幕时触发     touchmove 手指在屏幕上滑动时触发     touchend 手指从屏幕上移开时触发     *touchcancel 系统停止跟踪触摸时触发,如电话或弹出消息          无特殊说明,均为冒泡,【只能用 DOM2 绑定】

    event对象包含     touches:Touch对象的数组,当前跟踪的触摸操作,所有触摸点列表     targetTouches:特定于事件

    Touch触摸对象的属性         clientX         clientY

    访问event.touches[i].clientX

表单事件

    submit 提交事件    change 发生改变的时候    reset 重置事件

页面属性相关

    innerHTML 指的是从对象的起始位置到终止位置的全部内容,包括html标签     innerText 指的是从起始位置到终止位置的内容,但他去除html标签,如<p>内容</p>,只取内容

    元素.setAttribute("属性","值");     元素.getAttribute("属性")

    创建节点     document.createElement("div");          加入节点的方法     parentNode.appendChild(childElement);末尾追加方式插入     parentNode.insertBefore(newNode,beforeNode) 在指定节点前插入新节点     parentNode.removeChild(childNode);     替换节点的方法     parentNode.replaceChild(newChild,oldChild)     var a1 = document.getElementById("a1");     var ele = document.createElement("div");     ele.innerHTML = '<p>我是一个p</p>';     a1.appendChild(ele);

 

最新回复(0)