JavaScript 是一种轻量级的编程语言,也是一门脚本语言,动态语言(不须要声明数据类型),与python同样。后来出现的node.js能够做为后端语言来开发项目,因此js是一个既能作前端又能作后端的语言javascript
1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,1997年,ECMA发布262号标准文件(ECMA-262)初版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScriptcss
ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现html
年份 | 名称 | 描述 |
---|---|---|
1997 | ECMAScript 1 | 第一个版本 |
1998 | ECMAScript 2 | 版本变动 |
1999 | ECMAScript 3 | 添加正则表达式 添加try/catch |
ECMAScript 4 | 没有发布 | |
2009 | ECMAScript 5 | 添加"strict mode"严格模式 添加JSON支持 |
2011 | ECMAScript 5.1 | 版本变动 |
2015 | ECMAScript 6 | 添加类和模块 |
2016 | ECMAScript 7 | 增长指数运算符(**) 增长Array.prototype.includes |
一个完整的 JavaScript 实现是由如下 3 个不一样部分组成的:前端
核心(ECMAScript)java
文档对象模型(DOM) Document object model (整合js,css,html)node
浏览器对象模型(BOM) Broswer object model(整合js和浏览器)python
第一种方式:放在< html >标签中(< head>标签、 body>标签、 body>标签外都行,但必定要在html标签中)正则表达式
<script> alert('第一个js代码') </script>
第二种方式:先建立一个.js文档,而后经过外部引入的方式使用编程
<script src='目标js文档'></script>
还有一种能够直接在浏览器下直接调试javascript代码:f12打开浏览器的调试窗口,而后在console运行这个调试台json
console.log('第一个js代码') /console.log表示打印内容,至关于python的print/
JavaScript单行注释符:/ 内容 / -----python的单行注释符:# JavaScript多行注释符:/*多行内容*/ -----python的多行注释符:'''多行内容'''或者"""多行内容""" JavaScript结束符:; -----python没有结束符,一行就是结束
JavaScript的变量能够由数字,字母,下划线,$组成,但不能以数字开头
/保留字/ abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile
JavaScript变量声明使用 var 变量名 进行声明
var id = 1; /能够分两步,声明变量var id;而后赋值id = 1,通常一步写完/
JavaScript不区分整数和浮点数,统称为数组
var a=1; /必定要先var声明再赋值/ undefined var b=3.1 /能够不在末尾加;结束符,console会自动加上,但要养成加;的习惯/ undefined typeof(a); /typeof用于查看类型/ "number" typeof(b); "number"
数组还包括还一个特殊的值NaN(Not a Number):它表示不是一个数字,可是一个值
parseInt('A'); NaN typeof(NaN) "number"
字符串的表示跟python有点相似,JS要var声明
var s='随便什么'; undefined s; "随便什么" typeof(s); "string" var s1='Hello'; undefined var s2=' World'; undefined s1+s2; /可使用+对字符串进行拼接/ "Hello World"
类型转换
/字符串转数值/ parseInt('111'); 111 parseFloat('111.11'); 111.11 parseInt('AAA'); NaN
字符串经常使用方法
.length #获取字符串的长度(不加括号的就是属性,加括号的才是方法) .trim() #删除空白 .trimLeft() #删除左边空白 .trimRight() #删除右边空白 .charAt(n) #经过索引找对应的值,n为索引 .indexOf('字符',n) #经过字符找对应的索引,n为开始寻找的索引值,找不到就返回-1 .concat('字符串') #拼接字符串 .slice(m,n) #对字符串进行切片,范围为[m,n) .toUpperCase() #将字符串字母所有变为大写 .toLowerCase() #将字符串中字母所有变为小写 .split('字符',m) #将字符串从指定字符进行切分,m为切分后显示的字符串个数 var s='hello world '; undefined s.length; 12 s.trim(); "hello world" s.trimRight(); "hello world" s.trimLeft(); "hello world " s.charAt(1); "e" s.indexOf('o',5); 7 s.concat('!!!'); "hello world !!!" s.slice(0,5); "hello" s.toUpperCase(); "HELLO WORLD " s.toLowerCase(); "hello world " s.split('o',1); ["hell"] s.split('o',2); (2) ["hell", " w"]
JS的布尔值区别于python的布尔值,JS的布尔值为true和false,python为True和False
var a=true; undefined typeof(a); "boolean" #注意:''、0、null、undefined、NaN都是false
#null表示值为空,undefined表示只声明了变量但未对变量赋值 //null通常用于指定或者清除某个变量时使用。 //undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有当函数无明确的返回值时, return的也是undefined。通常var 变量名后都会显示undefined,哪怕对变量赋了值
JavaScript一切皆对象,与python很类似,如数值、字符串、数组、函数等等,此外,JavaScript还容许自定义对象--{}
JavaScript 提供多个内建对象,好比 Number、String、Date、Array 等等,经过new实例化的对象都是object类型,数组不须要new声明,其自己类型就是object类型。
对象只是带有属性和方法的特殊数据类型。
var a=new Number(1); /经过new实现对象的声明/ undefined typeof(a); "object" #注意:null实际上是一种空的对象引用 typeof(null); "object" typeof(undefined); "undefined"
建立数组有两种方式
#第一种方式 var a=[1,2,3] undefined typeof(a); "object" #第二种方式 var b=new Array([1,2,3]) undefined typeof(a); "object"
数组的方法和属性
.length #获取数组长度 .push(x) #从数组尾部插入数据 .pop() #从尾部删数据 .unshift(x) #从头部插入数据 .shift() #从头部删除数据 .slice(m,n) #切片,[m,n) .reverse() #数组翻转,会改变原数组 .split('字符') #将数组按照字符进行拼接成一个字符串 .concat(s1) #数组拼接,不改变原数组 .sort() #数组按照大小排序,有坑,会改变原数组 .splice(i,n,x)#对数组进行删除和插值操做,i为要删除的位置,n为日后删除的个数,x为插入的值 #示例演示 var a=[1,4,3,2]; undefined a.length; 4 a.push(10); 5 a.pop(); 10 a.unshift(0); 5 a.shift(); 0 a.slice(1,3); (2) [4, 3] a.reverse(); (4) [2, 3, 4, 1] a.join(','); "1,4,3,2" a.concat([5,8,6]); (7) [1, 4, 3, 2, 5, 8, 6] a.sort(); (4) [1, 2, 3, 4] a.splice(1,2,[5,6,7,8]); (2) [2, 3] a; (3) [1, Array(4), 4]
#关于sort()的坑 var a=[4,11,84,73] a.sort() (4) [11, 4, 73, 84] function sortNumber(a,b){ #从小到大排列 return a - b; } a.sort(sortNumber) (4) [4, 11, 73, 84] function sortNumber(a,b){ #从大到小排列 return b - a } a.sort(sortNumber) (4) [84, 73, 11, 4] #解释: 若是想按照其余标准进行排序,就须要提供比较函数,也就是本身提供一个函数提供排序规则,该函数要比较两个值,而后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具备两个参数 a 和 b,其返回值以下: 若 a 小于 b,在排序后的数组中 a 应该出如今 b 以前,则返回一个小于 0 的值。 若 a 等于 b,则返回 0。 若 a 大于 b,则返回一个大于 0 的值。
//注意 var a=[1,2,3] for (var i in a) //这里的i只是取得索引 { console.log(i) }
自定义对象相似于python中的字典
建立一个自定义对象 var a={"name":"tom","age":4}; var a={name:"tom",age:4}; #JavaScript支持键不加引号,系统会默认补上 遍历自定义对象 for (var i in d) {console.log(i,d[i]);} name tom age 4 d.name; #能够经过.键的方式取值 "tom"
#算术运算符有+、-、*、/、%、++、- - ++:自增长,a=i++表示先a=i,而后再i=i+1,a=++i则是先i=i+1,而后再a=i --:自增减,a=i--表示先a=i,而后再i=i-1,a=--i则是先i=i-1,而后再a=i
#比较运算符有<、<=、>、>=、==、!=、===、!=== ==:弱等于,这种很差,不用,使用=== #1 == “1” // true 它会将将1转换为字符串'1',在=号两个数据类型不一样的时候,会自动给你变成相同的 !=:弱不等于,尽可能不用,使用!== ===:强等于 !==:强不等于
#赋值运算符有=、+=、-=、*=、/=
#逻辑运算符有&&(与)、||(或)、!(非)
var a=6; if (a>6){ console.log('大于六') }else if(a<6){ console.log("小于六") }else{console.log('等于六')}; 等于六
var a=90; switch (a/10) #switch里面能够加变量或者表达式 { case 6:console.log('成绩为60-69分'); break; case 7:console.log('成绩为70-79分'); break; case 8:console.log('成绩为80-89分'); break; case 9:console.log('成绩为90-99分'); break; case 10:console.log('成绩为100分'); break; default:console.log('成绩不及格'); break; #全部条件都不知足就执行default }; 成绩为90-99分 #注意:break很重要,若是不加程序会继续往下走,直到碰到一个break才会中止
#while var a=3; while (a>0) #符合条件则进入循环 { console.log(a); a-- }; #do-while var a=3; do { console.log(a); a-- } while (a>0); #不知足条件就退出 #while与do-while的区别:当一开始就条件不知足的=时,while循环一次都不会执行,而do-while会先执行一次循环再结束
#for用于遍历循环 #第一种方式 var a=[22,33,44]; for (var i in a) { console.log(i); console.log(a[i]); }; #第二种方式 var a=[22,33,44]; for (var i=0;i<a.length;i++) { console.log(i); console.log(a[i]); };
#三元运算 var c=a>b?a:b; 当a>b时将:前的值赋值给c,当a<b时将:前的值赋值给c var a=1; var b=2; var c=a>b?a:b; console.log(c);
JavaScript的函数与python中的函数很类似,在声明时有区别
#建立一个函数 function func(a,b) #使用function来进行函数声明 { return [a+b,a-b] #当返回值为多个值时必定要使用数组,不然只会返回第一个值 }; func(1,2); (2) [3, -1] #没有返回值时默认为undefined function func1(a,b) { a=a+b; }; var ret=func1(1,2) typeof(ret) "undefined" #匿名函数,至关于python中的lambda函数 var func1=function (a,b) { return a+b; } func1(1,2); #在ES6中匿名函数能够写成以下形式 var func1=(a,b)=>a+b; =>后面就是return的值
函数的全局变量与局部变量
#局部变量:在JavaScript函数内部声明的变量(使用 var)是局部变量,因此只能在函数内部访问它(该变量的做用域是函数内部)。只要函数运行完毕,本地变量就会被删除。 #全局变量:在函数外声明的变量是全局变量,网页上的全部脚本和函数都能访问它。 #变量生存周期: JavaScript变量的生命期从它们被声明的时间开始。 局部变量会在函数运行之后被删除。 全局变量只有在页面关闭后被删除。
做用域
#函数会首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。
闭包
#与python中的闭包一致,内层函数对外层非全局变量的使用 var a=1; function f(){ var a=2; function inner(){ console.log(a); } return inner; } var ret = f(); ret();
与python的类相似,ES5没有类的概念,只有在ES6才引入了类的概念
ES5的封装方法
function Person(name) { this.name=name; #定义对象的属性,this至关于python的self } Person.prototype.max=function (a,b) #定义对象的方法,pro { return c=a>b?a:b; }; ƒ (a,b) { return c=a>b?a:b; } var p=new Person('大黄'); undefined p.name; "大黄" p.max(1,2); 2
date对象的基本操做
var d1 = new Date(); //获取当前时间 console.log(d1.toLocaleString()); //当前时间日期的字符串表示 2020/6/12 下午5:03:29 #方法2:参数为日期字符串 var d2 = new Date("2004/3/20 11:12"); console.log(d2.toLocaleString()); var d3 = new Date("04/03/20 11:12"); #月/日/年(能够写成04/03/2020) console.log(d3.toLocaleString()); #方法3:参数为毫秒数 var d3 = new Date(5000); console.log(d3.toLocaleString()); #输出为时间戳,从格林威治时间经历了5000ms的时间 console.log(d3.toUTCString()); #UTC与Locale相差8h #方法4:参数为年月日小时分钟秒毫秒 var d4 = new Date(2004,2,20,11,12,0,300); console.log(d4.toLocaleString()); #毫秒并不直接显示
date对象的其余方法
var d = new Date(); #getDate() 获取日 #getDay () 获取星期 ,数字表示(0-6),周日数字是0 #getMonth () 获取月(0-11,0表示1月,依次类推) #getFullYear () 获取完全年份 #getHours () 获取小时 #getMinutes () 获取分钟 #getSeconds () 获取秒 #getMilliseconds () 获取毫秒 #getTime () 返回累计毫秒数(从1970/1/1午夜),时间戳
Json对象有两个方法,JSON.parse( ) 与JSON.stringify( )
var obj = {"name": "大黄", "age": 10}; #对象转换成JSON字符串 序列化 var str = JSON.stringify(obj); str; "{"name":"chao","age":18}" #JSON字符串转换成对象 反序列化 var obj1 = JSON.parse(str); obj1; {name: "chao", age: 18} #返回的自定义对象{}的键不带""
使用正则表达式取寻找符合要求的字段,经常使用于用户输入时匹配,与python的re模块相似
#建立正则对象的方法 var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$"); #简写方式: var reg1 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/; #test方法.测试某个字符串是否符合正则规则 var s = 'hello' reg1.test(s) #符合返回True,不符合返回false #一个坑: reg1.test() #里面什么也不写,会默认放一个"undefined"字符串 reg1.test("undefined") #返回true,由于undefined符合正则规则
正则方法
var s = "Ao hello "; s.match(/o/g); //(2) ["o", "o"] 查找字符串中符合正则的内容,/o/g后面这个g的意思是匹配全部的o s.search(/h/g); //1 查找字符串中符合正则表达式的内容位置,返回第一个配到的元素的索引位置,加不加g效果相同 s.split(/o/g); //["A", " hell", ""] 按照正则表达式对字符串进行切割,获得一个新值,原数据不变 #s.replace()的四种形式 var s='A man is here a'; s.replace(/a/i, "啦啦"); //"啦啦 man is here" 不区分大小写替换一次 s.replace(/a/, "啦啦"); //"A m啦啦n is here" 只替换一次 s.replace(/a/g, "啦啦"); //"A m啦啦n is here 哈哈" 全局替换 s.replace(/a/gi, "啦啦"); //"啦啦 m啦啦n is here 哈哈" 不区分大小写全局替换 #坑: var reg = /a/g; var s = 'a man is here'; reg.test(s); //true reg.lastIndex; // 1 reg.test(s); //true reg.lastIndex; // 4 reg.test(s); //false reg.lastIndex = 0; #从新赋值,让其归零
math对象相似于python中的内置模块math
Math.abs(x) 返回数的绝对值 .exp(x) 返回 e 的指数 .floor(x) 小数部分进行直接舍去 .log(x) 返回数的天然对数(底为e) .max(x,y) 返回 x 和 y 中的最高值 .min(x,y) 返回 x 和 y 中的最低值 .pow(x,y) 返回 x 的 y 次幂 .random() 返回 0 ~ 1 之间的随机数 .round(x) 把数四舍五入为最接近的整数 .sin(x) 返回数的正弦 .sqrt(x) 返回数的平方根 .tan(x) 返回角的正切
BOM和DOM总结 https://www.cnblogs.com/Programmatic-yuan/articles/13166861.html