JavaScript

JavaScript

一、如何编写

1.代码形式
标签<script type="text\javascript"></script> #type声明这是JavaScript代码,可以忽略

存在形式:①head的script标签②文件src引入本地js③远程src
④为了效率,放置body最下面
---------------
2.注释格式
单行//
多行/* */

2.简介
学习一门语言:从基本数据类型和基本语法开始

基本数据类型:数字、字符串、列表、字典、布尔类型
条件
循环

3.定时器:setInterval("alert(123);",5000) 每5秒执行一次函数

				<script>
					function f1() {
						console.log(111);
					}
					setInterval("f1();",5000)
				</script>

  

4.js分号
实际为了节省容量,网络上一般使用min.js文件,通常都写一行,不加分号不能识别

二、变量

		python:
			name=''
		JavaScript:
			name='' #默认全局变量
			var name = ''   #局部变量  

  

三、数据类型

数字:
统一浮点数值表示
parseInt()将某值转换成数字
parseFloat()将某值转换成浮点型


字符串:

			obj.length                           长度		
			obj.trim()                           移除空白
			obj.trimLeft()
			obj.trimRight)
			obj.charAt(n)                        返回字符串中的第n个字符
			obj.concat(value, ...)               拼接,类似+
			obj.indexOf(substring,start)         子序列位置
			obj.lastIndexOf(substring,start)     子序列位置,倒着找
			obj.substring(from, to)              根据索引获取子序列
			obj.slice(start, end)                切片,两者差不多
			obj.toLowerCase()                    大写
			obj.toUpperCase()                    小写
			obj.split(delimiter, limit)          以‘’进行分割
			obj.search(regexp)                   从头开始匹配,返回匹配成功的第一个位置(g无效)
			obj.match(regexp)                    全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
			obj.replace(regexp, replacement)     替换,正则中有g则替换所有,否则只替换第一个匹配项,
												 $数字:匹配的第n个组内容;
												 $&:当前匹配的内容;
												 $`:位于匹配子串左侧的文本;
												 $':位于匹配子串右侧的文本
													 $$:直接量$符号

  

方法:在前端称为string,所有的方法都在String.prototype中
通过String.prototype.函数名 = function(){}能够自定义方法

布尔类型:
a = true #python中是小写

== 比较值相等

			a = true     #python中是小写
		
			==      比较值相等
			!=      不等于
			===   	比较值和类型相等
			!===  	不等于
			||      或
			&&      且

  

列表(js中称数组):

			a=[11,22]
		
			obj.length          数组的大小
			obj.push(ele)       尾部追加元素,对比python中的append()
			obj.pop()           尾部获取一个元素
			obj.unshift(ele)    头部插入元素
			obj.shift()         头部移除元素
			obj.splice(start, deleteCount, value, ...)  插入、删除或替换数组的元素
								obj.splice(n,0,val) 指定位置插入元素
								obj.splice(n,1,val) 指定位置替换元素
								obj.splice(n,1)     指定位置删除元素
			obj.slice( )        切片
			obj.reverse( )      反转
			obj.join(sep)       将数组元素连接起来以构建一个字符串,python中是''.join('alex')
			obj.concat(val,..)  连接数组
			obj.sort( )         对数组元素进行排序

  

字典:
{} #属于对象类型,但分model对象和普通字典,model对象通过[]获取,普通字典通过.操作

四、语句和异常

1.循环语句

		for循环:
			①循环的是索引,字典时是键key
				a=[11,22,33]
				for(var item in a){
					console.log(item);   #a[item]
				}
		
			②标准循环,不支持字典
				for(var i=0;i<a.length;i++){    #记得声明var
					a[i]
				}
		while循环:
		
			while(条件){
			
			}

  

2.条件语句:

		if( && ){    #对比python中是and,or对比是||
				
		}else if(){
			
		}else{}
		
		switch(name){
			case '1':
				console.log()
			default :
				...
		}

  

3.异常处理

		try {
			//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
		}
		catch (e) {
			// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
			//e是一个局部变量,用来指向Error对象或者其他抛出的对象
		}
		finally {
			 //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
		}

  

五、函数

1.基本函数

		普通函数:function func(){}
	
		匿名函数:setInterval("func()",5000)
				  setInterval(function(){
					console.log(123);
				  },5000)
	
		自执行函数:
			function func(){}
			
			func() #直接执行,这是主动执行
	
			用途:引入多家网站js文件时,函数名func可能会重复,用匿名函数替代
			
			(function(arg){
				console.log(arg);
			})(1)                 #解析时自动执行,现大多数js文件都是这样,程序一到来自动执行

  

2.函数作用域

========================1.JavaScript的作用域为函数(let则是块级)======================================
其他语言:以代码块作为作用域

			public void Func(){
				if(1==1){
					string name = 'Java'
				}
				console.writeline(name);
			}
			Func()  #程序报错,以{}作为代码块

  

python:以函数作为作用域

			def func():
				if 1==1:
					name = 'alex'
				print(name)
			func()  #能运行,以一个冒号一个缩进作为一个代码块,所以作用域不一样,python以函数作为作用域

  

JavaScript:以函数作为作用域

			function func(){
				if(1==1){
					var name = 'sss';
				}
				console.log(name);
			}
			func()   #能执行

  

========================2.函数的作用域在调用前,已经创建======================================

即function编译时已经创建,func()调用的时候前

========================3.函数的作用域存在作用域链,且在被调用前已创建======================================
即嵌套函数作用域
例子一:

		xo = 'alex'
		function func(){
			var xo='eric';
			function inner(){
				var xo = 'tony';
				console.log(xo);
			}
			inner()             #输入xo变量从内到外的作用域找该变量,都没有就报错
		}

  

例子二:

		xo = 'alex'
		
		function func(){
			var xo='eric';
			function inner(){
				console.log(xo);
			}
			return inner;            #不加括号,返回函数
		}
		
		var ret = func()             #ret = inner 函数
		ret()                        #输出eric,作用域在调用前已确定

  

例子三:

		xo = 'alex'
		
		function func(){
			var xo='eric';
			function inner(){
				console.log(xo);
			}
			var xo = 'tony'
			
			return inner;           
		}
		
		var ret = func()             
		ret()                        #输出tony,func的作用域xo先等于eric,后被替换为tony

  

========================4.函数内局部变量提前声明=======================

	function func(){
		console.log(xx);
		xx = 'alex';
	}
	func();        		#输出undefined,因为编译过程中生成作用域链的同时将内部的局部变量xx提前声明了,
						但没赋值,执行时输出的xx已声明,还没赋值,故undefined。

  


3.面向对象及原型

		JavaScript支持面向对象,是函数的一个变种
		function foo(){
			this.name = 'alex';     #①this即python中的self
			this.sayName = function(){
				console.log(this.name);
			}
		}   
		var obj = new foo()  		#②创建对象要添加new关键字
		obj.name
		obj.sayName()               #多个对象创建时内存会重复定义
		
		python中:
			class Foo:
				def __init__(self,name):
					self.name = name
					
				def sayName(self):
					print(self.name)
					
			obj1 = Foo('we')
			obj2 = Foo('wee')       #类中的方法只创建一次,保存在类中,引用时.sayName

  

解决:将函数的初始化(构造方法)与方法分离开。

				function Foo(){
					this.name = n;
				}
				#原型,用于存放方法的空间
				Foo.prototype = {
					'sayName':function(){
						console.log(this.name)
					}
				}
				obj.sayName()执行时会在prototype中找

  

六、其他

1.JavaScript序列化及转义

		a.将字典、数组转换为字符串
	
			JSON.stringify(li)    #对应python写法json.dumps()
	
		b.将字符串转换为字典、数组
			
			JSON.parse()          #更常用,平时从数据库拿数据得到的是字符串,对应python写法json.loads()

  

转义:特殊的符号如中文和\等,需要转为一串字符,通常用在js中向客户端保存数据如cookies、输入框内容时转义
客户端(保存cookies ) -> 服务器端

		decodeURI( )                    URl中未转义的字符,即解码
		
		decodeURIComponent( )   		URI组件中的未转义字符
		
		encodeURI( )                    URI中的转义字符,如url的搜索词中文
													
		encodeURIComponent( )           转义URI组件中的字符,除了中文,还转义所有除字母外的字符\=:
		
		escape( )                         对字符串转义,保存cookies时用  
		unescape( )                       给转义字符串解码
		URIError                          由URl的编码和解码方法抛出

  

一般的代码由python或者pycharm进行编码,不用转义。中文等特殊字符一定要编码。

2.自动登录抽屉并点赞(python代码实现,与js无关)

		### 1、首先登陆任何页面,获取cookie(已经登录后,再去页面拿cookie)
	 
			i1 = requests.get(url= "http://dig.chouti.com/help/service")
			 
		### 2、用户登陆,携带上一次的cookie,后台对cookie中的 gpsd 进行授权
		
			i2 = requests.post(
				url= "http://dig.chouti.com/login",
				data= {
					'phone': "86手机号",
					'password': "密码",
					'oneMonth': ""
				},
				cookies = i1.cookies.get_dict()
			)
		 
		### 3、点赞(只需要携带已经被授权的gpsd即可)
		
			gpsd = i1.cookies.get_dict()['gpsd']   (抽屉专有cookie字段)
			i3 = requests.post(
				url="http://dig.chouti.com/link/vote?linksId=8589523",  (不同用户id需修改)
				cookies={'gpsd': gpsd}
			)
			print(i3.text)

  

3. eval

		python:
			val = eval(表达式)  如eval("1+1")返回2,用于处理excel表格,
								没有eval的话通过split然后转数字然后运算。
			
			exec(代码块)  如for循环,没有返回值,不然一个循环多个返回值	
	
		JavaScript:
			eval 集合了上两种功能,可加代码也可加表达式

  

4.时间

python中time模块获取

JavaScript中Data类

			var d = new Data()
			
			d.getMinutes()   获取 
			d.setMinutes()   设置	

  

5.正则表达式
-登录注册验证

主要提供了两个功能:验证和提前

test - 判断
exec - 获取

如何写:

			python中import re模块
			rep = "\d+"
			re.match(rep,'asdad')
	
			javascript中
			rep = /\d+/          所有的表达式都写着/ /内
			rep.test('as23das34')  返回true,只要有就返回true
			rep.exec('as23das34')  返回["23"],只拿第一个匹配值,数组形式

 

符号:

			开始:^
			结束:$
			/\bJava(\w*)\b/:匹配单词开头和结尾  *表示0个或多个,+表示一个或多个
			/.../g           表示全局匹配,执行一次返回一个匹配直到null,再执行重新匹配
			/.../i           表示不区分大小写
			/.../m           表示多行匹配
			
			JS正则匹配时本身默认多行,m模式下使得^$能够匹配换行的内容,本来^指的是整体,现在第二行的开头
			也能匹配^。
			
				text = "asda\nJavaScript is more fun than Java or JavaBeans!";
				pattern = /^Java(\w*)/g;
				pattern.exec(text)
				
				返回null,加上m后返回JavaScript。

  

分组:
表达式加括号,返回匹配值和分组内容

			var pattern = /\bJava(\w*)\b/;
			var text = "JavaScript is more fun than Java or JavaBeans!";
			result = pattern.exec(text)   
			返回 ["JavaScript", "Script"]

  

可以g全局匹配

验证:
JS循环内,添加自定义属性进行定制验证

if('属性名称'){正则表达式匹配}

 

posted @ 2018-07-28 15:37  心平万物顺  阅读(110)  评论(0编辑  收藏  举报