Web前端有三层:javascript
HTML:从语义的角度,描述页面结构前端
CSS:从审美的角度,描述样式(美化页面)java
JavaScript:从交互的角度,描述行为(提高用户体验)python
布兰登 • 艾奇(Brendan Eich,1961年~),1995年在网景公司,发明的JavaScript。web
开始JavaScript叫作LiveScript,后更名为JavaScript正则表达式
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)制定的标准。编程
ECMAScript不是一门语言,而是一个标准json
2004年,JavaScript命运开始改变,那一年,谷歌公司开始带头使用Ajax技术,Ajax技术就是JavaScript的一个应用。数组
JavaScript在移动页面中,也是不可或缺的。浏览器
HTML5推出了一个东西叫作Canvas(画布),工程师能够在Canvas上进行游戏制做,利用的就是JavaScript。
2011年,Node.js诞生,使JavaScript可以开发服务器程序了。
JavaScript是有界面效果的,是弱变量类型的语言,变量只须要用var来声明
JavaScript是前台语言,而不是后台语言。JavaScript运行在用户的终端网页上
JavaScript基础分为三个部分:
ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等。
DOM:操做网页上的元素的API。好比让盒子移动、变色、轮播图等。
BOM:操做浏览器部分功能的API。好比让浏览器自动滚动。
(1)简单易用:可使用任何文本编辑工具编写,只须要浏览器就能够执行程序。
(2)解释执行(解释语言):事先不编译、逐行执行、无需进行严格的变量声明。
(3)基于对象:内置大量现成对象,编写少许程序能够完成目标
1.JS的引入方式
1 直接编写 <script> alert('abc') </script> 2 导入文件 <script src="index.js"></script>
2.JS的变量
1.声明使用var关键字
var a; a=3;
2.一行能够声明多个变量.而且能够是不一样类型
var name="alex", age=20, job="teacher";
3.变量命名:
4.“直接量”即常量,也称为“字面量”。
简单的直接量有2种:数字、字符串。例如:alert(886);
(1)JavaScript对换行、缩进、空格不敏感。备注:每一条语句末尾要加上分号
(2)全部的符号,都是英语的。好比括号、引号、分号。
(3)JavaScript的注释:
// 我是单行注释 /* 我是多行注释 我是多行注释 */
弹出警告框:alert("")
控制台输出:console.log("")
用户输入:prompt()
alert和prompt的区别:
alert("从前有座山"); //直接使用,不须要变量 var a = prompt("请输入一个数字"); // 必须用一个变量,来接收用户输入的值
数据类型有:
number ----- 数值 boolean ----- 布尔值 string ----- 字符串 undefined ----- undefined null ----- null
typeof()表示“获取变量的类型”
是由Unicode字符、数字、标点符号组成的序列;字符串常量首尾由单引号或双引号括起
var a = "abcde"; var b = "路飞"; var c = "123123"; var d = "哈哈哈哈哈"; var e = ""; //空字符串
Boolean类型仅有两个值:true和false
Boolean值主要用于JavaScript的控制语句
if (x==1){ y=y+1; }else{ y=y-1; }
Undefined类型
1.Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。
2.当函数无明确返回值时,返回的也是值 "undefined";
Null类型
另外一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 其实是从值 null 派生来的,所以 ECMAScript 把它们定义为相等的。
不一样:undefined 是声明了变量但未初始化时赋值,null 则用于表示尚不存在的对象。
将等号右边的值,赋给左边的变量;等号右边的变量,值不变。
prompt()
就是专门用来弹出可以让用户输入的对话框。重要的是:用户无论输入什么,都是字符串。
将number转化为string类型:用函数 String() toString()
将字符串转换成number类型,可用number。
parseInt()能够将字符串转数字。取整,只保留数字部分
parseFloat()能够将字符串转数字。保留小数部分的数值
算术运算符: + - * / % ++ -- 比较运算符: > >= < <= != == === !== 逻辑运算符: && || ! 赋值运算符: = += -= *= /= 字符串运算符: + 链接,两边操做数有一个或两个是字符串就作链接运算
算术运算符:自增,自减
++i:先计算后赋值
i++:先赋值后计算
比较运算符:
> >= < <= != == === !==
比较运算符两侧若是一个是数字类型,一个是其余类型,会将其类型转换成数字类型.
比较运算符两侧若是都是字符串类型,比较的是最高位的asc码,若是最高位相等,继续取第二位比较.
== 比较的是值的相同 console.log(x==y);//返回true === 比较的是值和数据类型(内存地址) console.log(x===y);//返回false
逻辑运算符
&&表示与 两个条件都成立的时候 才成立
||表示或有一个条件成立的时候 就成立
var age = 20; if(age>18){ //{}至关于做用域 console.log('成年'); } alert('alex'); //下面的代码照样执行
var age = 20; if(age>18){ //{}至关于做用域 console.log('成年'); }else{ console.log('好好学习'); } alert('alex'); //下面的代码照样执行
var age = 18; if(age==18){ //{}至关于做用域 console.log('成年); }else if(age==30){ console.log('而立'); }else{ console.log('11') } alert('alex'); //下面的代码照样执行
//1.模拟 若是总分 >400 而且数学成绩 >89分 被清华大学录入 //逻辑与&& 两个条件都成立的时候 才成立 if(sum>400 && math>90){ console.log('清华大学录入成功') }else{ alert('高考失利') }
//2.模拟 若是总分>400 或者你英语大于85 被复旦大学录入 //逻辑或 只有有一个条件成立的时候 才成立 if(sum>500 || english>85){ alert('被复旦大学录入') }else{ alert('高考又失利了')
case 表示一个条件,知足这个条件就会输出,直到遇到break跳出
若是不写break,程序会遇到下一个break中止。这个就是 'case穿透'
var gameSore = 'n'; switch(gameSore){ case 'good': console.log('玩的很好'); break; case 'better': console.log('玩的更好'); break; case 'best': console.log('玩的最好'); break; default: console.log('很遗憾,淘汰'); break; }
// 例子:打印 1~9之间的数 var i = 1; //初始化循环变量 while(i<=9){ //判断循环条件 console.log(i); i = i+1; //更新循环条件 }
练习:将1~100全部是2的倍数在控制台打印。使用while循环
var i = 1; while(i <= 100){ if(i%2==0){ console.log(i); } i +=1; }
//无论有没有知足while中的条件do里面的代码都会走一次 var i = 3;//初始化循环变量 do{ console.log(i) i++;//更新循环条件 }while (i<10) //判断循环条件
for循环遍历列表是最经常使用的对数据的操做
//输出1~10之间的数 for(var i = 1;i<=10;i++){ console.log(i) }
练习:输入1~100之间全部数之和
var sum = 0; for(var j = 1;j<=100;j++){ sum = sum+j } console.log(sum);
for循环嵌套练习
for(var i=1;i<=3;i++){ for(var j=0;j<6;j++){ document.write('*')//document.write(''); 往浏览器文档中写 } document.write('<br>') }
在JavaScript中除了null和undefined之外其余的数据类型都被定义成了对象,也能够用建立对象的方法定义变量。
String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是基于对象实现的
字面量方式建立
var colors = ['red','green','yellow'];
使用构造函数(后面会讲)的方式建立 使用new关键词对构造函数进行建立对象,构造函数与后面的面向对象有关系
var colors = new Array(); //经过下标进行赋值 colors[0] = 'red'; colors[1] = 'green'; colors[2] = 'yellow'; console.log(colors);
数组的经常使用方法
var north = ['北京','山东','天津']; var south = ['东莞','深圳','上海']; var newCity = north.concat(south); console.log(newCity)
var score = [98,78,76,100,0]; var str = score.join('|'); console.log(str);//"98|78|76|100|0"
var arr = ['张三','李四','王文','赵六']; var newArr = arr.slice(1,3); console.log(newArr);//["李四", "王文"]
var arr = ['张三','李四','王文','赵六']; arr.pop(); console.log(arr);//["张三", "李四","王文"]
var arr = ['张三','李四','王文','赵六']; arr.push('小马哥'); console.log(arr);//["张三", "李四","王文","赵六","小马哥"]
var names = ['alex','xiaoma','tanhuang','angle']; //4.反转数组 names.reverse(); console.log(names);
var names = ['alex','xiaoma','tanhuang','abngel']; names.sort(); console.log(names);// ["alex", "angle", "tanhuang", "xiaoma"]
布尔类型值 = Array.isArray(被检测的值) ;
var str = 'alex'; var charset = str.charAt(1); console.log(charset);//l
var str1 = 'al'; var str2 = 'ex'; console.log(str1.concat(str2,str2));//alexex
var a = '1234567755'; var newStr = a.replace("4567","****");//旧的,新的 console.log(newStr);//123****755
var str = 'alex'; console.log(str.indexOf('e'));//2 console.log(str.indexOf('p'));//-1
var str = '小马哥'; console.log(str.slice(1,2));//马
var str3 = 'SAKDjlaakljfadfhajdk'; console.log(str3.split('a',3));
var str = 'XIAOMAGE'; console.log(str.toLowerCase());//xiaomage
var str = 'xiaomage'; console.log(str.toUpperCase());//XIAOMAGE
// Math内置对象 //1.向上取整(小数点向上加1),天花板函数 var x = 1.3142; var a = Math.ceil(x); console.log(a);//2 //能够用于分页 var pageNum = 12345/6; console.log(Math.ceil(pageNum));//2058 console.log(pageNum);//2057.5 //2.地板函数(即小数点前面的数值,保持不变) console.log(x);//1.3142; console.log(Math.floor(x));//1 //3.求两个数的最大值与最小值 console.log(Math.max(2,5));//最大值 5 console.log(Math.min(2,5));//最小值 2 //4.取随机数Math.random() [0-1),初始值是0 console.log(Math.random()); //取200-500之间的随机数 公式:min+Math.random()*(max-min) console.log(200+Math.random()*(500-200));
函数:就是把将一些语句进行封装,而后经过调用的形式,执行这些语句。
函数的做用:
//1.普通函数,声明函数 function add(x,y) { return x+y; } alert(add(1,2));//能够在任何地方调用函数 //2.函数对象 var add = function(x,y){ return x+y; }//函数类型的 console.log(add(3,4));
js中建立对象的方式
//1.使用Object或者对象字面量建立对象 var person = Object(); console.log(person); console.log(typeof person); //给对象赋值 person.name='alex'; person.age=20; console.log(person); var favfn = function () { //this 指的是当前的对象 跟python中的self相似 console.log(this.name); } var person2={ name:'wusir', age:26, fav:favfn } console.log(person2); person2.fav();
//4.原型模型式建立对象 propotype 它是当前对象的父类 function Person(name,age){ this.name=name; this.age=age; } Person.prototype.alertName = function () { alert(this.name); }; var p1 = new Person('alex',20); var p2 = new Person('alex1',23); //内存地址与值 console.log(p1===p2); p1.alertName(); p2.alertName();
arguments表明的是实参,只在函数中使用。
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b,c) { console.log(arguments); console.log(fn.length); //获取形参的个数 console.log(arguments.length); //获取实参的个数 console.log("----------------"); }
arguments能够修改元素,但不能改变数组的长短
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b) { arguments[0] = 99; //将实参的第一个数改成99 arguments.push(8); //此方法不经过,由于没法增长元素 }
清空数组的几种方式:
var array = [1,2,3,4,5,6]; array.splice(0); //方式1:删除数组中全部项目 array.length = 0; //方式2:length属性能够赋值,在其它语言中length是只读 array = []; //方式3:推荐
建立日期对象只有构造函数一种方式,使用new关键字
//建立了一个date对象 var myDate = new Date();
//返回本地时间 console.log(myDate().toLocalString());
//内置函数 var myDate = new Date(); console.log(myDate); //获取月份中的第几天,1-31 console.log(myDate.getDate()); //getMonth() 获取指定日期对象的月份(0-11),须要加一 console.log(myDate.getMonth()+1); //返回四位数的年 2019 console.log(myDate.getFullYear()); //getDay 返回一星期的周几,0代指的是星期日 console.log(myDate.getDay()); //getMinutes()获取分钟数,getSecond() 获取秒数 console.log(myDate.getMinutes()); console.log(myDate.getSeconds()); //经常使用:返回本地时间,2019/2/24 上午8:45:53 console.log(myDate.toLocaleString())
//json 是个轻量级的数据交换格式,json有两种结构:对象与数组 //1.对象: var person={ name:'zhangsan' }; var packJSON={ "name":"alex",//字符串键值对须要加上引号 "pwd":123 }; console.log(packJSON);//是个对象 //2.数组 是值的有序的集合 var packJSON=[{ "name":"alex","pwd":123},{ "name":"wu","pwd":123}]; console.log(packJSON); //json对象和json字符串转换,在数据传输中,JSON一般是字符串形式传递的 //js常见操做json对象,全部json对象和json字符串转换很是重要的,用parse内置函数 var jsonStr = '{"name":"alex","pwd":123}'; var jsonobject = JSON.parse(jsonStr);//json要大写 console.log(jsonobject); //(2).将json对象 转为 json字符串 var jsonStr2 = JSON.stringify(jsonobject); console.log(jsonStr2);//{"name":"alex","pwd":123} //3.遍历JSON对象与JSON数组 //(1).遍历json对象,使用for in var packJson = {"name":"alex","pwd":123}; for (var k in packJson){ //k指的是键值对的key值 console.log( k + ' ' +packJson[k]) } //(2).遍历JSON数组 var packJson = [{"name":"alex","pwd":123},{"name":"wusir","pwd":123}]; for (var i in packJson){ console.log(i + ' '+ packJson[i].name+' '+packJson[i].pwd); }
正则表达式:
对象 RegExp 正则表达式:检索字符串 用来规定文本检索的内容
//1.-----------建立正则表达式--- //1.1构造函数 new RegExp(检测文本,修饰符) i 不区分大小写 g:全局匹配 var str = "luffy 2018"; var reg = new RegExp("l","ig"); //1.2 字面量方式建立 var reg1 = /y/ig; //不区分大小写,全局匹配 //2.检索方式: //2.1 test() 检索字符串中是否包含定义字符模式,返回布尔 // 要检索的字符在不在str中存在 在 返回true 不在 返回flase console.log(reg1.test(str)); //2.2 exec() 是检测字符串中正则表达式 的匹配 //若是匹配到了 那么就返回一个存放有结果的数组,若是没有匹配就返回一个null console.log(reg1.lastIndex);//0 保存一次匹配时开始的下标 console.log(reg1.exec(str)); // 返回个数组结果,若无,则返回null console.log(reg1.lastIndex);// 5 //经常使用方法: //1.match 字符串.match(正则) var str = "hello world"; var reg = /o/g; //使用 正则表达式模式对字符串执行查找,并将包含查找的的结果做为数组返回 console.log(str.match(reg)); //["o","o"] //2.replace 替换 replace(被替换的,替换的) console.log(str.replace(reg,"*")); //3.search() console.log(str.search(reg));//查询字符串 在字符串中出现的下标 //4. split 以匹配的规则分割 console.log(str.split(reg));
元字符:一些匹配的规则
//1 . 匹配除换行符之外的任意字符 window.onload=function(){ var str = "luffyCity 2018"; var reg = /./g; //默认检索第一个字符 console.log(reg.exec(str));//l }; //若是不想让字符有其余意义 转移\ \.表明匹配 str = "www.baidu.com"; var reg = /www\......\.com/g; console.log(reg.exec(str));//www.baidu.com //2. []:匹配[]里面的任意一个字符 var str1 = "hello"; var reg1 = /[a-zA-z0-9]/g;//a-z 小写,A-Z大写,0-9数字 console.log(reg1.exec(str1));//h var str2= 'a1343'; var reg2 = /[0-9][0-9][0-9]/g; console.log(reg2.exec(str2));//134 //3. [^] 全部不在这个范围的字符 var str3 = "abd123"; var reg3 = /[^a-z][^A-Z]/g; //匹配条件 之外的字符,两个字符两个字符的匹配 console.log(reg3.exec(str3));//12 //4.\d:匹配数字 对立 \d:匹配非数字 var str4="web"; var reg4 = /\d/g; //匹配数字 var reg5 = /\D/g; //非数字 console.log(reg4.exec(str4));//null console.log(reg5.exec(str4));//w //5.\w:匹配数字 字母 下划线 \w:匹配除数字、字母,下划线之外的任意字符 var reg6 = /\w/g; //匹配数字 字母 下划线 var reg7 = /\W/g; //匹配 \w 之外的任意字符(非\w) console.log(reg6.exec(str4));//w console.log(reg7.exec(str4));//null //6.\s:匹配空格 trim() var str5 = ' luffy'; var reg8 = /\s/g;//空格 var reg9 = /\S/g; //非空白字符 console.log(reg8.exec(str5)); // ' ' console.log(reg9.exec(str5));// l //7.^:以什么开头 $:是以什么结尾 var str6 = "www.luffy.com"; var reg10 = /^www/g; //^字符 console.log(reg10.exec(str6));//www var reg11 = /^www\......\.com$/g; //字符$ console.log(reg11.exec(str6));//www.luffy.com //------------------------------------------------------------------- //重复的字符 //7. ?:匹配字符第一个字符 结果返回:空或'1'; var str7 = "webr44546ere"; var reg12 = /[0-9]?/g; console.log(reg12.exec(str7));//"1" //8.*:首位是否符合条件,不符合返回空;符合,则看首位一直向后符合的位数 var reg13 = /[a-z]*/g; //匹配小写字母,0个或者多个 console.log(reg13.exec(str7));//' ', //9.+:匹配数字,至少匹配一次 var reg14 = /\d+/g; console.log(reg14.exec(str7));//123 //10.匹配连续的10个字符 //11.{min,max} 至少min个最多max个