Python基础(六)

运算符

  • 算术运算符 + - * / ++ –

  • 赋值运算符 = += -= *= /= %=

  • 比较运算符 > >= < <= == ===

  • 逻辑运算符 && || !

  • 三元运算符:

    ​ 条件 ? true环境:false环境

流程控制

  • 顺序结构: 代码从上往下依次执行
  • 分支结构: 通过if 和 switch 来进行分支选择
  • 循环结构: 通过for, while 等重复执行某段代码 (功能)

分支1: if(条件表达式) 代码块

分支2: if(条件表达式){

​ 代码块

​ }

分支3: if(条件表达式){

​ true环境

​ }else{

​ false环境

​ }

分支4: if(条件表达式1){

​ true环境1

​ }else if(条件表达式2){

​ true环境2

​ }else if(条件表达式3)

​ true环境3

​ }…

分支5: if(条件表达式1){

​ if(条件表达式2){

​ if(条件表达式3){

​ 代码块

​ }

​ }

​ }

switch 分支:

​ switch(标志){

​ case 标志1:代码块

​ case标志2:代码块

​ …

​ case标志N:代码块

​ default:代码块}

  • 循环结构

    while循环:

    ​ while(条件表达式1){

    ​ 代码块

    ​ }

​ do while循环

​ do{

​ 代码块

​ }while(条件表达式)

函数

定义函数

  • 方法1:函数声明 function 函数名(参数…){

    ​ 代码块}

  • 方法2:函数表达式 var 变量名 = function(参数…){代码块}

  • 方法3:函数构造 var 变量名=new Function(‘参数1’,‘参数2’,…,‘代码块’)

函数引用

  • 函数名() 带小括号 立马执行函数
  • 函数名 不带小括号 不执行函数
  • (函数)() 一旦执行该行时,立马执行该函数

函数参数

定义函数时给的参数—>形参

调用函数时给的参数—>实参

实参个数 > 形参个数 将多余的实参全部抛弃

实参个数 < 形参个数 多余形参当成undefined(如有默认值则用默认值)

作用域

全局变量:在函数外部通过var声明的变量/在函数内外不用var定义的变量

局部变量:在函数内部通过var声明的变量

作用域链的特性:对上封闭,对下透明

作用域是在函数声明时,局部变量都已经声明好的,只是暂时未定义(没赋值,相当于undefined)

获取标签对象

  • 通过标签id获取标签对象:document.getElementById(id名)
  • 通过标签对象来获取html属性:标签对象.html属性名
  • 给标签设置/获取 style属性: 标签对象.style.属性名 = 属性值
  • 设置/获取标签的正文内容:标签对象.innerHTML

动态改变标签属性:onclick = ‘js代码’===>点击某对象时触发js

定时器

  • setTimeout(代码,时间)

    功能:在指定时间之后,执行一次代码功能,俗称‘倒计时定时器’

  • clearTimeout(定时器)

    功能:清除定时器

  • setInterval(代码,时间)

    功能:每隔一段时间,执行一次代码功能

  • clearIntercal(定时器)

    功能:清除定时器

对象

创建对象

  • 构造方式

    var 变量名/对象名 = new Object();

  • JSON方式 推荐

    var 变量名/对象名 = {

    ​ 属性名1:属性值1,

    ​ 属性名2:属性值2,

    ​ …

    ​ 属性名N:属性值N,

    ​ 方法名:function(){

    ​ 代码块

    ​ },

    ​ …

    }

  • 自定义构造函数

    ​ function 函数名(){

    ​ this.属性名1 = 属性值1;

    ​ this.属性名2 = 属性值2;

    ​ …

    ​ this.属性名N = 属性值N;

    ​ this.方法名 = function(){

    ​ 代码块

    ​ }

    ​ …

    ​ }

  • 匿名构造函数

    ​ var 变量名/对象名 = new function(){

    ​ this.属性名1 = 属性值1;

    ​ this.属性名2 = 属性值2;

    ​ …

    ​ this.属性名N = 属性值N;

    ​ this.方法名 = function(){

    ​ 代码块}

    ​ …

    ​ }

  • 创建对象的对象

    ​ 对象.constructor

  • js原型 就是Python的类属性 类方法

    设置属性和方法 独享设置:对象名.属性名=属性值 对象名.方法名 = function(){代码块}

    ​ 共享设置:对象名.prototype.属性名 = 属性值 对象名.prototype.方法名=function(){代码块}

    删除对象 delete 删除方法后,方法不存在。再次使用会报错

    ​ 实例化后的不能删除 自带的属性和方法可以使用

数组

创建数组

​ 构造创建:var 数组名 = new Array(值1,值2,值3,…)

​ JSON创建:var数组名=[值1,值2,值3,…]

多维数组:数组中嵌套数组

var c = [
    				['大姨妈', '小姨妈'],
    				['大姨夫', '小姨夫'],
    			 ];
    	console.log(c);

数组操作

  • 新增/修改数组

​ 数组名[键] = 值 键不存在则新增,已存在则修改

​ 键为number 会计入length,键为string 不会计入length

  • 访问数组

​ 数组名[键] 键不存在则返回undefined

  • 遍历数组

    var list = [ '熊初墨', '王根基', '倪霸霸', '于伟文', '黄阿玛' ];
    
    // for 遍历
    for(var i = 0; i < list.length; i++){
    	document.write(i + ' ====> ' + list[i] + '<br />');
    		}
    document.write('<hr>');
    
    // 优化for 
    for(var i = 0, j = list.length; i < j; i++){
    	document.write(i + ' ====> ' + list[i] + '<br />');
    		}
    	document.write('<hr>');
    
    
    // for in 遍历
    for( var i in list ){
    	document.write(i + ' ====> ' + list[i] + '<br />');
    		}
    
    // json对象数据
    var obj = {name:'小炮',  age:18,  sex:'女'}
    console.log(obj, typeof(obj));
    
    for(var i in obj){
    	document.write(i + ' ====> ' + obj[i] + '<br />');
    		}
    
  • 遍历元素集合

<ul id="nav">
    	<li>小米</li>
    	<li>红米</li>
    	<li>笔记本</li>
    	<li>路由器</li>
    </ul>
    

	<script>
		var nav = document.getElementById('nav');
		var li = nav.getElementsByTagName('li');  // 获取 htmlCollection集合对象

		console.log(nav);
		console.log(li);

		// 遍历 li
		// 	需求1: 字体设置为 red
		// 	需求2: 原有内容基础上加 序号
		for(var i = 0; i < li.length; i++){
			li[i].style.color = 'red';
			// li[i].innerHTML = li[i].innerHTML + i;
			li[i].innerHTML += i;
		}

内置对象Array

不会改变原数组的方法

​ concat 合并数组

b = a.concat(100, true, 1.5);

​ join 数组转为字符串

b = a.join(); 		// 默认以 逗号 分割
b = a.join('----');

​ slice 截取数组

b = a.slice(2,8);

会改变原数组的方法

​ push 在末尾插入一个值

a.push('小蜻蜓');

​ pop()删除末尾值

a.pop()

​ unshift() 在开头插入一个值

a.unshift('111')

​ shift() 删除开头值

a.shift()

​ reverse() 反转数组

a.reverse()

​ sort() 按照ASCII排序

a.sort()

事件绑定与解锁

事件绑定1
​ <开始标签 事件=“js代码”>

事件绑定2
​ 元素对象.事件 = function(){ 代码块 }
​ 元素对象.事件 = 函数名 没有小括号

事件监听
​ 标准: 元素对象.addEventListener(事件, 函数, bool)
​ IE: 元素对象.addachEvent(事件, 函数)

​ bool:
​ true: 事件捕获 --> 先触发父级, 再触发子集
​ false: 事件冒泡, 默认 --> 先触发子集, 再触发父级

解除绑定
​ 元素对象.事件 = null
​ 元素对象.事件 = function(){} 空函数

解除监听
​ 元素对象.removeEventListener(事件, 函数, bool)
​ 元素对象.detachEvent(事件, 函数)

绑定一组元素与this的使用

  • 获取一组标签
    元素对象.getElementsByTagName(‘标签名’)

​ document : 整个页面
​ 指定标签对象 : 指定标签

  • this
    代表当前对象
    谁用this, this就代表谁

鼠标事件

	常见鼠标事件
		onclick 		左击, 单击
		ondblclick 		双击
		oncontextmenu 	右击
		onmouseover 	划入  hover
		onmouseout 		划出
		onmousedown 	按下
		onmouseup 		松开
		onmousemove 	移动

event事件

获取event对象
​ 在事件触发时的函数形参处 赋予event

​ xxx.onclick = function( event ){

​ }

注意点:
​ 通常事件 配合函数使用
​ window.event 主要兼容IE
​ event 名字可以变换

常用event属性
​ event.x 鼠标的x坐标
​ event.y 鼠标的y坐标
​ event.button 获取鼠标按键 左键0 / 右键2 / 中键1
​ event.offsetX 鼠标相对于 触发事件的x坐标
​ event.offsetY 鼠标相对于 触发事件的y坐标

图层拖拽

	box.onmousedown = function( event ){
    	this.innerHTML = '按下';
    	this.style.background = 'pink';
		
		var event = event || window.event; // 兼容IE
		var left = event.offsetX;
		var top = event.offsetY;
		document.onmousemove = function( en ){

			var en = en || window.event;
			var x = en.x - left;
			var y = en.y - top;

			box.style.left = x + 'px';
			box.style.top = y + 'px';
		}

	}

	box.onmouseup = function(){
		this.innerHTML = '松开';
		this.style.background = 'orange';

		document.onmousemove = null;

键盘事件

​ onkeydown 按键按键触发
​ onkeyup 松开按键触发

​ onkeypress 按下并松开触发 (js高级事件)
​ 并非所有按键都会触发

​ event属性
​ keyCode 当前按键的 Unicode编码

表单事件

​ onsubmit 表单提交时触发
​ onfocus 表单获取到光标时触发
​ onblur 表单失去光标时触发
​ onchange 改变表单的内容或状态时触发
​ oninput 输入内容时触发
​ onselect 内容框中时 触发

正则

作用:用于搜索,替换,验证等功能

语法:/ 正则表达式/ 模式修正符

可见原子: 键盘输出之后, 肉眼可见的字符 例如: 数字, 字母, 标点…

不可见原子: 键盘输出之后, 肉眼看不见的字符 例如: 空格, 回车, 制表符

			[ ] 		匹配 [ ]中任意一个原子
			[x-y] 	匹配 x-y 中的任意一个原子
			[^ ]  	匹配 除了[ ] 外任意一个原子
			| 		匹配 竖线的左边 或 右边的整体
			( ) 		将( )内的原子当成一个整体, 看做是一个大原子
			(abc|xyz) 	匹配竖线左边的abc 或 右边的xyz
			
			.       小数点, 匹配任意字符 (除了换行符)
			\d 	 	匹配任意一个数字  [0-9]
			\D		[^0-9]
			\s 		匹配任意一个不可见原子  包含空格, 回车, 制表符..
			\S				一个可见原子
			\w 		匹配任意一个 数字, 字母, 下划线
			\uxxxx  查找十六进制规定的字符
					xxxx : 4位十六进制数
					\u 不变的, 固定的
					例如:
						汉字: \u4e00 ~ \u9fa5

			{n} 	连续匹配前面一个原子出现正好 n次
			{n,} 	连续匹配前面一个原子出现最少 n次
			{n,m} 	连续匹配前面一个原子出现最少 n次, 最多m次
			* 		{0,} 	最少0次
			+ 		{1,} 	最少1次
			? 		{0,1} 	最少0次, 最多1次

			^ 		匹配字符串的开头
			$ 		匹配字符串的结尾

  • 匹配函数
    ​ match( 正则 )
    ​ 返回值: 匹配到的内容

    ​ 仅匹配一次,匹配不到, 则返回null

  • 替换函数
    ​ replace( 正则, 替换值)
    ​ 返回值: 替换之后的内容
    ​ 仅替换一次,匹配不到, 则返回 原来的值

  • 模式修正符
    ​ i 不区分大小写
    ​ g 全部匹配

    ​ 正则默认严格区分大小写

    ​ 另类用法
    ​ 在匹配发生歧义时???
    ​ 贪婪: .*
    ​ 懒惰: .*?

  • 后向引用
    ​ ( ) 功能1: 将 ( ) 内的内容当成一个大原子
    ​ 功能2: 将 ( ) 内的内容存入 子模式组

    ​ \1: \1引用第一个( )的值, 两处的值保持同步
    ​ \2: \2引用第二个( )的值, 两处的值保持同步
    ​ …
    ​ \n: \n引用第n个( )的值, 两处的值保持同步

    ​ 条件:
    ​ 必须要有 ( ), \n 才能使用

  • 取消子模式
    (?: ) 该( ) 的值 不会送进子模式组

  • 正向预查
    (?= ) 预先检查后面的值 向右

  • 负向预查
    (?! ) 预先检查前面的值 向左

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值