Js如何操作的DOM?浏览器有html源码渲染的功能,把html源码在内存里形成一个DOM对象,就是文档对象还有一个javascript的解释器/执行器引擎我们在html里写一个js代码,js代码引擎所执行,而执行的结果就是对DOM的操作,而非对DOM操作的结果,就是我们常看到效果,比比如图片移动,变色1.javascrip语言本身的语法,2.DOM对象3.BOM模型browser,浏览器模型浏览器是“宿主”,但Js的宿主不限于浏览器,也可能是服务器端Javascript和以后的PHP一样,都是一种解释执行的语言语言分:解释执行和编译执行英文中国人张三(不会英文)1.把英文的报刊翻译成中文报刊,然后再看(翻译完之后,多了一份中文版)2.找一个同声翻译,一连看英语,随时翻译出中文来方式1:第一次运行的时候,要多等一会,因为要等报纸翻译完毕但是一旦翻译完毕后,以后再运行,就能直接运行方式2:每次运行都要翻译所以:hello.c----hello.exe[二进制代码可执行文件]Hello.php/hello.js--PHP解释引擎/js引擎---产生相应的执行效果Javascript和java的关系语言本身没有关系网景公司最早开发出来的在浏览器运行的脚本语言:livescript开发之后,正碰上java如日中天,为了抱大腿,改名叫javascript编程共用的东西:变量、控制结构(顺序/分支/循环)、表达式、语句;变量的讨论:请看黑板:黑板上的内容代表今天的排骨价格:依据这个场景,来深入探讨编程中的重要概念-----变量我们可以挖掘出的要素:黑板----------内存中该变量的存储地址当天价格---------变量名40.1----------变量值数值----------变量的类型排骨很贵、房价也很贵Varage=22;Varprice=40.1;当声明上述两个变量之后,发生了什么呢2240.1如上,js解释引擎先创建2个变量名:ageprice再为此2个变量申请各自的空间、并获得地址40.1变量档案AgePricenianling然后,ageprice的地址属性的值就是内存中的地址也就是说,变量名并不直接体现变量的值,只能体现该变量在内存中的位置来看:Vara=3;建立变量、申请空间,变量指向该空间,并把3记录到相应的内存空间Varb=a;建立变量b、申请空间,变量指向该空间,并把a变量对应的内存中的值读出来,再存储到b的相应空间变量的赋值b=a为例,不仅可以把a的值读出来,存储到b的相应空间,这样的话,a,b是相互独立的,修改时不影响对方,这种情况叫“传递赋值”还有另外一种情况,“引用赋值”变量赋值b=a指向的地址,这样b和a都指向同一个地址,这样的话,a,b是相互影响的,修改时互相影响在javascript语言里,不必像PHP那样用”&”符号来声明引用赋值Javascript里,数组、函数、对象,这三都默认即是引用赋值的Js变量名称的要求:1.变量名只能用字母、下划线、数字、$、这4种组成2.首字母不能以数字开头3.比较新的js标准已经支持用任何UNICODE字符做变量名(当然,仍然不能用数字开头)这意味着,汉字可以做变量名(实际开发勿用)4.变量名区分大小写5.要求命名有意义,不要用aaa,c,asdf这样的变量名6.变量可以先声明,但不赋值;变量声明:Varage=22;Age=22;//这是一种不规范的写法,与加var的区别很大,请不要这样写在Html代码中,如何引入javascript(和css的引入对比学习)1.可以用scripttype=”text/javascript”Code……..//自己写的代码/script2.可以把js代码拿到一个专门的.js文件里然后引用该文件scripttype=”text/javascript”scr=””/script注意:外部的.js文件里面直接写js代码,不要在开头和结尾加script/script3.注意一种错误的写法scripttype=text/javascriptsrc=1.jsvar_name='张三';alert(_name);/script这样写是不会发生作用的4.请注意:如果用2种方式混合,引入多个script文件,运行效果相当于按顺序把多个script代码合起来,按顺序运行5.script/sctipt可以写在页面的哪个位置?答:页面head和body都可以写而且,有的时候会因为写在head区出现一些意外,比如,在head的script代码试图去访问body中的DOM对象,则会显示找不到Javascript里如何写注释1.多行注释/*Code…Code…*/2.单行注释Code…..//注释内容运算符:算术运算术:+-*/%(求余)9%2,余1注意:在js里,求余的时候是可以对浮点数求余的和PHP不一样,PHP求余的结果是整型可以这样:30.5%7=2.530%4.3=4.200000000000001注意:+号运算时,如果有一个操作数是字符串,那么最终得到的结果就是字符串条件运算符:==!======!==,,=,====代表全等于,不只值相等,类型也要相等比如:1==true,但是1!==true赋值运算符:赋值运算符主是把=右侧的值接值或表达式的值赋给左侧的变量例:age=22;Age=2012-birth;Age=age+1;----------age+=1;上面的写法,对于其他算术运算符同理可以用,逻辑运算符:或者:||前面的表达式为值,后面的表达式不会执行,叫短路并且:&前面的表达式为假,后面的表达式不会执行,JS里逻辑运算的特殊性返回不是布尔值,而是表达式判断出结果时的子表达式的值自增自减运算符:++--有的时候,我们需要这处效果,先用到a的值,顺手加1或者顺手减1注意:B=++/--a和b=a++/--的区别前者先运算后赋值,,后者先赋值再运算三元运算符:表达式1?表达式2:表达式3理解:表达式1如果为真,则返回表达式2的值,表达式1如果为假,则返回表达式3的值三大控制语句:顺序语句:顺序执行控制结构之单路分支If(表达式){代码段;//可以是一句,也可以是多句}表达式为真,则代码段执行,为假,则不执行,而一个表达式被if判断时,只有两种可能真/假,true/false代码段:要么整体执行,要么不执行If(表达式){代码段1;}else{代码段2;}如果表达式为真,则执行代码段1,如果表达式为假,则执行代码段2,Else是在if()的基础上进行判断,If(表达式1){代码段1;}elseif(表达式2){代码段2;}....elseif(表达式N){代码段2N;}else{代码段;//最后这个else不写也行}从前到后,逐个判断,如表达式n为真,则执行表达式n,然后跳出执行题目:Switch分支语句Switch(表达式){Case值1:代码段1;Break;Case值2:代码段2;Break;Case值3:代码段3;Break;Case值n:代码段n;Break;Default:代码段;}注意:switch中的case代码段结束后,一定要加break;如果不加,则满足条件的case后面的所有的case都将执行碰到有要比较范围的,用switch不适合,应该用if/else循环结构之while循环While(){}Do{代码段;}while();退出循环:Break破坏和continue继续Break在循环体内部,跳出本循环或者产,终止当前循环Continue是路过本次循环步骤For循环//for循环在javascript,C语言,PHP中,java及部分语言中都是非常重要的一个语言结构For循环三个表达式,可以省略吗?答:for循环的3个表达式可以写0—3个也就是说,3个表达式都可以省略公鸡5文钱一只,母鸡3文钱一只,邹鸡3只1文钱,100块钱买100只鸡,问公鸡,母鸡,邹鸡各有多少只?For循环嵌套时,如何在内层结束外层循环?可以给外层for循环加一个标签例:函数的概念函数:是变量的运算关系程序中的函数是指一段封装的代码段,能够完成特定功能函数的用法:函数的用法分声明和调用被调用的函数必须在页面内有声明过程函数的声明语法:Function函数名([arg1],[arg2]…arg[n]){代码段运行;[return返回值];baiji:for(varg=1;g=18;g++){for(varm=1;m=33;m++){varc=100-g-m;if((g+m+c)==100&&(g*5+m*3+c/3)==100){document.write('公鸡'+g+'只'+'母鸡'+m+'只'+'邹鸡'+c+'只'+'br/');breakbaiji;}}}}注意:可以有0----N个参数,但只有一个返回值函数的调用语法:函数名([arg1],[arg2]…arg[n]);函数的返回值:函数可以有0个或1个返回值,没有其他情况返回值给谁了?谁调用就给谁函数的执行权与执行权的交回JS代码由JS引擎来解释执行,有几个JS引擎同时工作呢?答:只有一个,单线程运行所以指令只能一条一条来运行当函数被调用时,JS解释引擎进入到函数内部去工作即执行权交给函数函数在2种情况下,交回执行权:1.碰到return,执行权交回2.如果没有return,函数的语句运行完毕后,执行权交回一个函数可以有几个return单词?答:0---多个,不同的条件可以执行不同的return语句函数的return可以执行几次?答:0—1次,JS中函数的特殊性和PHP比较在PHP中,函数就是语法上的结构体,不是一个变量,不能被赋值但是在JS中,函数也是一种变量,变量名就是函数名,声明函数Function函数名(参数){函数体}===声明了一个叫做”函数名”的变量并且变量的内容是(参数){函数体}函数中变量的作用域在JS中声明变量,必须要有var,不用var带来一个什么样的结果?变量被污染注意加与不加var声明变量的区别JS的系统函数字符集的概念字符集就是编码-------字符的映射1.escape(),将字符转化成各平台通用的unicode编码varstr='人民币';varenc=escape(str);alert(enc);alert(unescape(enc));*/2.parseInt(),把字符串的前缀部分的数字转换成整型数值使用使用如果首字符不是数字,分析出NaN输出来如果碰到前缀是有小数点的情况,直接舍弃小数后面的部分,并保留整数varage='helloword234';age=parseInt(age);alert(age);//输出NaN3.parseFloat(),把字符串的前缀部分的数字转换成浮点型数值使用varage='12.987hello';age=parseFloat(age);alert(age);4.isNaN(),专门用来判断parseFloat()和parseInt()的返回值为’非数字',NaN为非数字varage='999abc';age=parseInt(age);if(isNaN(age)){alert('是非数字');}else{alert('你的年龄是'+age);}5.isFinite(),用来判断一个值是否为有限对于1/0,-1/0这样的数,为无穷大varage=1/0;if(isFinite(age)){alert('你的年龄是'+age);}else{alert('你不可能这么大');}varage=-1/0;if(isFinite(age)){alert(age+'不是正常的数字');}6.eval()用来执行一段JS代码vart=3;t+=3;eval('t+=3');alert(t);数组的学习:数组:就是一组变量数组创建:vararr=[];//第一种空数组varstu=newArray();//第二种空数组vararr