javascript基本上介绍了JavaScript的历史:1995年之前,上网的用户很多,当时的带宽只有28.8kb/s。数据被发送到服务器。受限于带宽,浏览器与服务器的通信速度很慢,一次通信需要30s左右。这样,问题就来了。我们通常注册一个用户,需要填写很多信息。当我们填写完所有信息后,点击提交按钮,等待30s,提示我们用户名被占用,修改,提交,等待30s,提示用户名不符合规范,修改,提交,等待30s,密码不符合规范,修改,等待。..这种用户体验很差,给网友们造成了很大的困扰。随着上网的用户越来越多,这个问题也越来越严重。这时,网景(Netscape,一家浏览器公司)下定决心要解决这个问题,并将这个问题交给了BrendanEich(1964~,当时在Netscape工作的)一名程序员)为了解决它,他花了10个工作日设计了一种叫做LiveScript的门语言,专门用来解决客户端上的问题。Netscape和Sun合作,在发布时将其更名为Javascript,以利用互联网流行语Java。JavaScript从此成为互联网必备的组件。由于JavaScript1.0非常成功,微软推出了JScript脚本语言,后来几家公司创建了自己的客户端脚本语言。此时,JavaScript还没有统一其语法或功能的标准。随着互联网的发展,长期融合的趋势变得越来越必要。终于在1997年,ECMA(欧洲计算机制造商协会)邀请了Netscape、Sun、Microsoft、Borland等公司的一些程序员组成了TC39,定义了一个标准,叫做ECMAScript。ECMAScript是标准,javascript是语言。js概念概念:支持面向对象的跨平台脚??本语言。理解:脚本语言:依赖其他语言运行html必须在浏览器中运行,js嵌套在html中才能运行跨平台:可以在不同平台上运行windows、linux、android。..支持使用面向对象思想进行面向对象编程应用场景:表单验证:规范用户输入数据,与后台数据交互网页特效:为页面内容添加行为,让页面动起来https://zhuanlan.zhihu.com/p/...JS和H5的关系h5是html的下一个版本,非常强大,据我们所知,h5只是一些标签,并不能完美的展现出来,这些标签的深层功能可以展示它的强大添加js后才能激活。随着h5应用越来越多,js和各种框架、插件的使用方式也越来越多,甚至后台服务器的功能都可以从前端语言来实现。js的发展已经成为一种趋势。js的组成js的组成示意图ECMAScript:基本语法BOM:提供了一套操作浏览器对象的方法DOM:核心内容,提供了操作文档对象的方法在script标签中第二种方法:引入一个js文件对于初学者来说,它们位于正文末尾和html末尾之间。script标签使用src导入js文件后,js代码不能写在这个标签里,写的代码是无效的。因为是在html中嵌套运行的,打开浏览器直接运行js的注释注释代码是不会执行的,只是起到提示作用。注释可以解释复杂的代码,方便后期的维护和开发。单行注释://js单行注释是双斜杠多行注释:/*js多行注释:开头是斜杠星号,结尾是星号斜杠*/js输出所谓output其实就是将内容显示在网页中,与html不同,js代码不会主动显示在网页中,需要借助一些方法才能显示在网页中。以弹窗形式显示:alert(11);在弹窗中显示原理图,并以文本形式显示:document.write(123456);判断弹窗:confirm(12345)判断弹窗调试工具输出:console.log(123);代码调试工具输出注意:在js代码中,每行末尾可以加分号,也可以不加分号,但建议加分号。变数我们每天用碗吃饭,碗里的食物每天都在变化。我们的代码中也有这样一个容器,叫做变量。概念变量。x+1=2------x=1x+10=20------x=10理解变量就是内存中用来存放一些结果的空间。x=1------内存中有一个空间,空间的名字是x,里面存了1x=10------内存中有一个空间,名字空格的前面是x,里面存放了10个变量变量命名规则以字母和下划线开头,后面依次是数字、字母和下划线mm2mp33muser_id_start2_m变量声明var关键字,空格,后面是变量名在内存中开辟一块空间,给这个空间起个名字叫x,里面没有内容vara,b//一次声明多个变量//声明变量并赋值vary=10//开辟a内存中的空间,这个空间的名字是y,存储10Entervara=1,b=2;//一次声明多个变量并赋值说明:变量名是区分大小写的,也就是说小写的a变量和大写的A变量是两个不同的变量。您可以一次声明多个变量,使用var关键字,并用逗号分隔变量名称。也可以在变量声明中省略var关键字。称为隐式声明,带有var关键字的称为显式声明。关键字不能作为变量名,关键字是已经被系统占用的名称。思考:如何输出一个句子?alert("Isyourhairokay?")alert(123456)输出句子需要加引号,输出数字不需要。因为一个句子的类型和一个数字是不同的。房间是一个容器,里面有一张床,就是睡觉的卧室,里面有一头猪,就是养猪的猪圈。卧室和猪圈都是房间,只是类型不同。变量就是一个容器,里面放着不同的东西,它的类型也不同。数据类型类型示例备注Numeric(数字)1-23.14300包括整数、小数和负数String(字符串)“你好吗?”'Marrymetoday'引号括起来的一串字符,单引号Boolean(boolean)truefalse代表事物的两面,true和falseundefined(未定义)vara代表定义未赋值的变量对象(object)null[1,2,3]{name:Zhang3}表示一个集合,使用typeof(检测到的内容)得到一个内容的类型。控制台日志(类型(-123456));//numericconsole.log(typeof("明天会更好"));//字符串console.log(typeof(true));//布尔控制台.log(typeof(x));//booleanconsole.log(typeof([1,2,3]));//objectconsole.log(typeof({name:"张三",age:12}));//对象console.log(typeof(null));//对象结果如下图所示:类型检测示意图再学一个trick:typeof(x)可以写成typeofx。括号和空格都可以。number类型可以在结果中看到,number是用来表示number类型的。不同进制的数字我们一般使用十进制数,但是在js中我们也可以使用八进制和十六进制。变量a=010;//八进制变量b=0xA;//十六进制varc=0xb;//小写和大写字母都可以接受console.log(a);//8console.log(b);//10console.log(c);//11结果:示意图NaNvara="abc";varb=2;varc=a-b;console.log(c);//NaNresult:SchematicNaN:notanumber,意思是非数字在js中,NaN用来表示一个特殊的值,不是数字。当发现无法执行操作时,js不会报错,而是会返回一个NaNNaN注意:NaN的类型是数字类型是的,表示一个非数字的NaN不等于任何值,包括NaN本身,可以通过isNaN()判断是否为数字,当返回false时,表示为数字。vara=123;varb="abc";console.log(isNaN(a));//falseconsole.log(isNaN(b));//trueresult:Schematicdecimalscientificnotation//当一个数很大时,可以用科学计数法表示varnum=5e+5;//5乘以10的5次方varnum=3e-3;//3乘以10的-3次方浮点数精度损失问题//在进行浮点运算时,可能会出现精度损失的问题0.1+0.2=0.30000000000000004;0.2+0.2=0.4;//尽量少用浮点数进行运算,不要让浮点数进行比较。解法:根据小数点后位数乘以对应的整数;0.1+0.2==>(0.1*10+0.2*10)/10=0.30.01+0.02?最小值范围:Number.MIN_VALUE,这个值:5e-324最大值:Number.MAX_VALUE,这个值是:1.7976931348623157e+308Infinity:Infinity1/0infinitesimal:-InfinityStringtype在typeprint中可以看到string用于表示结果类型中的字符串。我们说字符串其实就是很多字符的集合,用引号括起来,但是单引号和双引号也是字符,如果把它们当作字符串的字符呢?思考,如何打印以下内容:大家好,我姓“熏”,我叫孙悟空。选择一个“好看”的外表,或者“有趣”的灵魂分析:引号可以嵌套,但本身不能嵌套,需要交叉嵌套(单引号嵌套双引号或双引号嵌套单引号)。使用转义符console.log('大家好,我姓“熏”,我叫孙悟空');console.log('选择一个“好看”的外表,和\\是\'有趣的\'灵魂');作用:示意图一些有特殊含义的字符需要转义,例如:符号意义\nnewline\ttab\bspace\斜杠'单引号'双引号例子:示意图注意:js可以输出标签,使得页面中的元素具有标签的特性,但是在输出标签的时候,标签必须以字符串形式输出。js输出标签字符串的字符数:string。length对象类型使用object来表示浏览器结果中的对象类型。Null表示空对象。通常,使用过的对象以后不会再使用了。当需要手动销毁它时,它被赋予一个空值。运算符赋值运算1=在编程中不叫“等号”,叫“赋值符号”。用于将右边的值赋值给左边的变量。反过来,赋值符号右边是值,左边是变量varx=1//把右边的数1赋值给左边的变量x,其实就是把数1右边进入内存空间叫x。注意:变量是可变的,也就是说同一个变量可以多次赋值,后面的值覆盖前面的值.varx=1;//声明变量x并赋值1x=10;//将变量x重新赋值给10alert(x);//现在x变量的值为10,第二次赋值时,是纯赋值操作,不是变量声明,所以没有使用var关键字。算术运算符示例备注+(sum)vara=1;变量b=2;变量c=a+b;数学中的加法-(difference)vara=2;变量b=1;变量c=a-b;数学减法*(product)vara=1;变量b=2;变量c=a*b;数学乘法/(商)vara=1;变量b=2;变量c=a/b;数学除法%(余数)vara=5;变量b=2;变量c=a%b;数,即数学中的加法运算。但是只要两边之一是字符串,就是把两边的值连成一个。这就是所谓的字符串连接。vara=12345;varb="上山打虎"varc=a+b;console.log(c);//结果:12345上山打虎,就是把变量a和b拼接在一起,组成一个新的字符串赋值给c变量。对于拼接操作的+左右两边,只要有一边是字符串,就进行拼接操作。具体情况有:数字+字符串、字符串+数字、字符串+字符串。关系运算(比较运算)运算符说明>大于>=大于等于<小于<=小于等于==等于(主要用来判断两边的值是否相等)===都等于(先判断两边的类型是否相等,类型Equal再判断值是否相等)关系运算的最终结果只有两种,一种为true和另一个是false,即布尔真假console.log(2>3);//假的vara=2>1;控制台日志(一);//trueresult运行结果相等vara=123;varb="123";console.log(a==b);//trueconsole.log(a===b);//falseresult运算结果是变量a和变量b在内存中占用大小相同,里面存储的内容也相同,所以相等但是类型不同,所以不相等。赋值操作二符号说明示例+=先加自己,再赋给自己vara=1;一个+=2;相当于先给a加2,把结果赋值给a-=先减去自己,再给自己赋值vara=1;一个-=1;相当于先把a减1,然后把结果赋给a*=先乘自己,再赋给自己vara=1;一个*=3;相当于先把a乘以3,结果赋值给a/=先自己除,再赋给自己vara=4;一个/=2;相当于先把a除以2,把结果赋值给a%=自己除完之后,再给自己赋值vara=5;%=2;相当于a加2,结果赋值给一个编码:vara=1;a+=2;//先把a加2得到结果3,然后把3赋值给aconsole.log(a);//3要理解上面的代码,首先要理解变量的重新赋值。变量a=1;//先声明,给a赋值1a=3;//将变量a重新分配给3console.log(a);//3理解了它的操作后再赋值给自己(回想一下:赋值字符左边是变量,右边是值)vara=1;一=一+2;//给自己加2,然后赋值给自己console.log(a);//3练习:最后一个变量a是什么?vara=5;a%=3;console.log(a);//2typeconversion强制转换为Boolean语法:Boolean(arg)非零数转换为Boolean为true,0转换为Booleanfalse如果非空字符串转换为true,则转换为Boolean,为空string转Boolean为falseUndefined转Boolean为falseNull转Boolean为false转换为字符串语法:String(arg)true转为字符串true,false转为字符串还是falsenull转换toastringthrowasnullundefinedconvertedtoastringisstillundefinedconvertedtoanumber语法:Number(str)NaN表示不是数字,但是他是数字类型(数字无意义)非数字字符串转换后都是NaN(NaN是不是数字的数字类型)。true转为数字为1,false转为数字为0,undefined转为数字为NaNnull。(arg)#强制转换为整数parseFloat(arg)#强制转换为小数小数转换为整数只取整数,将第一个非数字字符串向下舍入为整数和NaN,第一个为数字字符串强制转换Integer为第一个数字,Boolean强制为数字,NaNundefined强制为数字,NaNnull强制为数字,NaN使用toString()方法强制转换为字符串,转换结果与String()函数相同vara=123456;b=true;varc=a.toString();vard=b.toString();console.log(c);console.log(typeofc);console.log(d);console.log(typeofd);注意:该方法在使用不可见转换数学运算时不能将undefined和null转换为数值类型,示例:varstr="100"vara=str%10;//乘法、除法和余数都可以varb=true+1console.log(a);控制台日志(b);比较操作时会发生无形转换,例:如果两个值都是字符串,比较编码后的值。如果其中一个值是数字或布尔值,则将其转换为数字进行比较。如需比较,请参阅询问代码表。字符串转换发生在拼接操作中,例如:vara="1";console.log(a+12);//112pm逻辑运算逻辑运算一般用于判断多个关系运算,得到最终结果。运算符说明&&(and,and)左右两边都为真,最后的结果为真,否则为假\\(or)只要左右各有一个为真,最后的结果为真,否则为假!(Non,Negative)把真当假,把假当真处理。逻辑运算的最终结果也是布尔值。例:模特要求:18岁以上30岁以下。小红今年20岁了,看看小红是否符合条件吧。变量年龄=20;//小红的年龄varresult=age>18&&age<30;控制台日志(结果);//true表示小红满足条件。如果小红今年31岁呢?变量年龄=20;//小红的年龄varresult=age>18&&age<30;控制台日志(结果);//false表示小红不满足小红想结婚的条件:小红想和小明结婚。小明说:除非你身高超过160cm,否则你有5万元的嫁妆。小红身高155cm,做模特存了10万元。看看小红是否符合小明的条件。变种高度=155;//小红的身高varmoney=100000;//小红的钱varresult=height>160||金钱>50000;控制台日志(结果);//true表示小红对小明很满意如果小红只存了3万元呢?变种高度=155;//小红的身高varmoney=30000;//小红的钱varresult=height>160||金钱>50000;控制台日志(结果);//false表示小红不满足小明条件双重否定等于肯定。小于18岁或大于30岁的小红不符合结婚条件。变量年龄=20;//小红的年龄varresult=!(age<18||age>30);//如果条件不满足,则否定它满足console.log(result);//true表示this这种表达方式也是可以的。小红身高不到160cm,身上的钱不到5万元,不符合小明的条件。变种高度=155;//小红的身高varmoney=100000;//小红的钱varresult=!(height<160&&money<50000);//如果条件不满足,则取反表达式满足console.log(result);//true表示小红还是一个自增自减运算符满足条件:++表示对一个数加1vara=1;a++console.log(a);//2++可以放在后面,也可以放在前面,意思一样vara=1;++a;console.log(a);//2自增操作遇到赋值或输出时,++放在前面和后面有区别:放在后面vara=1;console.log(a++);//1console.log(a);//2varb=1;varc=b++;console.log(c);//1console.log(b);//2当++放在后面时,自增操作放在最后,先进行输出或赋值。放在前面vara=1;console.log(++a);//2console.log(a);//2varb=1;varc=++b;console.log(c);//2console.log(b);//2当++放在前面时,先进行自增操作,再进行输出或赋值。符号:--表示将一个数减1,方法和注意事项同自增。自增自减操作需要使用变量,不是具体的数字