Javascript学习点

                                     Javascript 笔记

数据类型:

  • 数值型
  • 字符串
  • 布尔型
  • null
  • undefined

变量:

提示:变量是没有类型或者说弱类型的
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是一个字面量,它是一个特殊的值,意思是空

全局:

全局属性: undefined,Infinity,NaN
全局函数: isNaN(),parseInt()
构造函数: Date(),RegExp(),String(),Object(),Array()
全局对象: Math,JSON


创建对象:

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

//访问对象属性
obj.topic = "java";
obj["real"] = false;
//对象中未声明的属性也可以进行设置
obj.props = {key:"value"}

//构造函数
//构造函数首字母大写
function Point(x,y){
	this.x = x;
	this.y = y;
}
//定义方法
Point.prototype.r = function(){
    return Math.sqrt(
		this.x*this.x + this.y*this.y
	)
}

//实例化
var point = new Point(1,1);
var r = point.r();


//延时执行函数

function moveon(){
	var answer = confirm("Ready!");
	if (answer)
		window.location = "http://www.test.com";
}
//6秒后执行定义的函数
setTimeout(moveon,6000);



//javascript的函数级作用域

//函数内局部变量的的赋值排在声明之前,但
//函数执行时局部变量会将声明提到函数顶部,如
var scope = "global";
function f() {
	console.log(scope);//输出undefined,而不是global
	var scope = "local";
	console.log(scope);//local
}

//实际:局部变量会将声明提到函数顶部
var scope = "global";
function f(){
	var scope;
	console.log(scope);
	scope = "local";
	console.log(scope);

}

  

创建数组:

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


     //访问数组内容:
     array[0]
     array.length

   遍历

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

  添加元素

attr.push(100);

javascript全局方法:

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

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

 parseFloat();
 parseInt();


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
     .lastIndexOf("l");
     .split(“n”) 以字符n分隔字符串,并返回一个数组,空字符串时分隔每个字符
     .slice(1,4);//同上
     .s.slice(-3);
     .substring(n,m) 截取字符串,从索引n开始截取,截取到m个字符(m取不到)
     .replace("h","H"); //返回新串,不影响原串
     .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对象: 回退,前进

布尔值
javascript的值都可以转换为布尔值
undefined,null,0,-0,NaN,""会转换为false


   

事件:

什么是事件:可以被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);


    //创建HTML元素示例
    //注意:需要将该代码放到文档后面,防止未加载
	function createDIV(content){
		var myDIV = document.getElementById("my-div");
		if (!myDIV){//获取为null,则创建
			myDIV = document.createElement("div");
			myDIV.id = "my-div";
			myDIV.innerHTML = "<h1>Show Content</h1>";
			document.body.appendChild(myDIV);
		}
		
		var pre = document.createElement("pre");
		var text = document.createTextNode(content);
		pre.appendChild(text);
		myDIV.appendChild(pre);
	}
	createDIV("test");


    // 操作元素的样式
	// highlight是已定义好的样式
	function highlight(e){
		if (!e.className) e.className = "highlight";
		else e.className += "highlight";
	}

	//所占的空间也随之消失
	element.style.display = "none";
	
	//隐藏,所占空间不消失
	element.style.visibility = "hidden";

模式匹配

在两条斜线之间的文本构成一个正则表达式直接量

/^HTML/ 以HTML开始的字符串
/[1-9][0-9]*/ 匹配一个非零数字,后面任意个数字
/\bjavascript\b/i 匹配单次javascript,忽略大小写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值