Java Script知识点汇总整理版_第1页
Java Script知识点汇总整理版_第2页
Java Script知识点汇总整理版_第3页
Java Script知识点汇总整理版_第4页
Java Script知识点汇总整理版_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaScript学习目录TOC\o"1-9"\h\u1 什么是JavaScript 32 JavaScript特点 33 JavaScript历史 44 JavaScript关键 45 开发工具集 66 JS代码嵌入一些问题 67 JavaScript语法、关键保留字及变量 77.1 语法组成 77.2 关键字和保留字 87.3 变量 88 数据类型 98.1 typeof操作符 98.2 Undefined类型 118.3 Null类型 118.4 Boolean类型 128.5 Number类型 138.6 String类型 168.7 Object类型 179 运算符 179.1 什么是表示式 189.2 一元运算符 189.3 算术运算符 199.4 关系运算符 219.5 逻辑运算符 229.5.1 逻辑与(AND):&& 239.5.2 逻辑或(OR):|| 239.5.3 逻辑非(NOT):! 249.6 位运算符 259.7 赋值运算符 259.8 其余运算符 269.8.1 字符串运算符 269.8.2 符号运算符 269.8.3 三元条件运算符 279.9 运算符优先级 2710 流程控制语句 2810.1 语句定义 2810.2 if语句 2910.3 switch语句 3010.4 do…while语句 3010.5 while语句 3010.6 for语句 3110.7 for…in语句 3110.8 break和continue语句 3110.9 with语句 3211 函数 3211.1 函数申明 3211.2 return返回值 3211.3 arguments对象(arguments:参数) 3312 面向对象与原型 3412.1 创建对象 3412.1.1 简单创建对象 3412.1.2 工厂模式创建对象: 3512.1.3 结构函数(结构方法)创建对象 3512.1.4 对象冒充 3612.1.5 方法其实是一个引用地址 3612.2 原型 3713 对象和数组 4013.1 Object类型 4113.2 Array类型 4213.3 对象中方法 4314 时间与日期 4714.1 Date类型 4715 DOM 4816 Browser对象 4916.1 screen对象 5016.2 location对象 5016.2.1 location对象属性(可读可写) 5016.2.2 location对象方法 5116.3 navigator对象 5117 基本包装类型 5218 内置对象 5218.1 Global对象 5218.2 Math对象 5419 封装库—调试封装 5620 事件 5620.1 事件冒泡和事件捕捉 5621 Ajax 5821.1 ajax概念 5821.2 XMLHttpRequest对象 5921.3 两种头信息 6121.4 GET和POST 6221.4.1 GET请求 6221.4.2 POST请求 6221.5 ajax代码 6221.5.1 ajax代码 6221.5.2 封装ajax 6322 正则表示式 6522.1 什么是正则表示式 6522.2 创建正则表示式 6522.3 字符串操作 6523 XML 6623.1 IE中XML 6623.1.1 创建XMLDOM对象 6623.1.2 载入XML 6723.1.3 同时和异步 6723.1.4 解析错误 6823.2 DOM2中XML 6923.2.1 创建XMLDOM对象 6923.2.2 载入XML 7023.2.3 DOMParser类型 7023.2.4 XMLSerializer类型 7123.2.5 解析错误 7123.3 跨浏览器处理XML 7124 XPath 7325 JSON 7325.1 JSON语法 7325.2 解析和序列化 74什么是JavaScriptJavaScript是一个具备面向对象能力、解释型程序设计语言。更详细一点,他是居于对象和时间驱动并具备相对安全性客户端脚本语言。因为他不需要在一个语言环境下运行,而只需要支持它浏览器即可。它主要目标是,验证发往服务器端数据、增加web互动、加强用户体验等。JavaScript特点涣散性JavaScript语言关键与C、C++、Java相同,比如条件判断、循环、运算符等。不过,它却是一个涣散型语言,也就是说,它变量无须具备一个明确类型。对象属性JavaScript中对象把属性名称映射为任意属性值。它这种方式很像哈希表或关联数组,而不像C中结构体或者C++、Java中对象。继承机制JavaScript中地面向对象继承机制是基于原型,这和另外一个不太为人所知self语言很像,而和C++以及Java中继承不太相同。JavaScript历史JavaScript关键即使JavaScript和ECMAScript通常被人们用来表示相同含义,但JavaScript含义却比ECMA-262中要求要多得多。一个完整JavaScript应该由以下三个不一样部分组成。关键(ECMAScript)文档对象模型(DOM)浏览器对象模型(BOM)ECMAScript介绍由ECMAScript-262定义ECMAScript与web浏览器没有依赖关系。ECMAScript定义只是这门语言基础,而在此基础之上能够构建更完善脚本语言。我们常见web浏览器只是ECMAScript实现可能宿主环境之一。 既然他不依赖于web浏览器,那么它还在哪些环境中寄宿呢?比如:ActionScript、ScriptEase等。而他组成部分有:语法、类型、语句、关键字、保留字、操作符、对象等。ECMAScript版本 ECMAScript现在有四个版本,1、2、3、4、5版本。Web浏览器对ECMAScript支持 到了,五大主流浏览器(IE、Firefox、Safari、Chrome、Opera)全部做到了与ECMA-262兼容。其中,只有Firefox力争做到与标准第四版兼容。以下是支持表。文档对象模型(DOM) 文档对象模型(DOM,DocumentObjectModel)是针对XML但经过扩展用于HTML应用程序编程接口(API,ApplicationProgrammingInterface)。 DOM有三个级别,每个级别都会新增很多内容模块和标准。以下是主流浏览器对DOM支持情况:浏览器对象模型(BOM) 访问和操作浏览器窗口浏览器对象模型(BOM,BrowserObjectModel)。开发人员使用BOM能够控制浏览器显示页面以外部分。而BOM真正与众不一样地方(也是经常会造成问题地方),还是他作为JavaScript实现一部分,至今仍没有相关标准。JavaScript版本 身为Netscape“继承人”Mozilla企业,是现在唯一沿用最初JavaScript版本编号浏览器开发商。在网景把JavaScript转手给Mozilla项目标时候,JavaScript在浏览器中最终版本号是1.3日后,伴随Mozilla继续开发,JavaScript版本号逐步递增。开发工具集代码编辑器:Notepad++。浏览器:谷歌浏览器,火狐浏览器,IE浏览器,IETestJS代码嵌入一些问题假如想弹出一个</script>标签字符串,那么浏览器会误解成JS代码已经结束了。处理方法,就是把字符串分成两个部分,经过连接符“+”来连接。或者使用外部链接JS <scripttype=”text/javascript”> alert(“</scri”+”ipt>”); </script>通常来说,js代码越来越庞大时候,我们最好把它另存为一个.js文件,经过src引入即可。它还具备维护性高、可缓存(加载一次,无需加载)、方便未来扩展特点。按照常规,我们会把<scritp>标签存放在<head></head>之间。但有时也会放在body之间。不再需要提供注释,以前为了让不支持JavaScript浏览器能够屏蔽掉<script>内部代码,我们习惯在代码前后用HTML注释掉,现在已经不需要了。 <scripttype=”text/javascipt”> <!-- alert(“欢迎!”); --> </script>平稳退化不支持JavaScript处理:<noscript> <noscript> 你没有启用JavaScript </noscript>JavaScript语法、关键保留字及变量语法组成区分大小写ECMAScript中一切,包含变量、函数名和操作符都是区分大小写。比如:text和Text表示两种不一样变量。标识符所谓标识符,就是指变量、函数、属性名字,或者函数参数。标识符能够是以下格式规则组合起来一或多个字符:第一字符必须是一个字母、下划线(_)或一个美元符号($)。其余字符能够是字母、下划线、美元符号或数字。不能把关键字、保留字、true、false和null作为标识符。比如:myName、book123等注释ECMAScript使用C格调注释,包含单行注释和块级注释。//单行注释/* 多行注释*/直接量(字面量literal、常量)全部直接量(字面量),就是程序中直接显示出来数据值。100 //数字字面量‘直接量’ //字符串字面量False //布尔字面量/js/gi //正则表示式字面量Null //对象字面量在ECMAScript第三版中,像数组字面量和对象字面量表示式也是支持,以下:{x:1,y:2} //对象字面量表示式[1,2,3,4,5] //数组字面量表示式关键字和保留字ECMAScript-262描述了一组具备特定用途关键字,通惯用于控制语句开始或结束,或者用于执行特定操作等。关键字也是语言保留,不能用作标识符。ECMAScript-262还描述了另一组不能用作标识符保留字。尽管保留字在JavaScript中还没有特定用途,但它们很有可能在未来被用作关键字。变量ECMAScript变量是涣散类型,所谓涣散类型就是用来保留任何类型数据。定义变量时要使用var操作符(var是关键字),后面跟一个变量名(变量名是标识符)。 varbox;这句话定义了box变量,但没有对它进行初始化(也就是没有给变量赋值)。这时,系统会给它一个特殊值--undefined(表示未定义)。 varbox=”变量值”;所谓变量,就是初始化后能够再次改变量。ECMAScript属于弱类型(涣散类型)语言,能够同时改变不一样类型量。(PS:即使能够改变不一样类型量,但这么做对于后期维护带来困难,而且性能也不高,造成成本很高!) varboxString=”变量名”; boxString=100;重复使用var申明一个变量,只不过是一个赋值操作,并不会报错。但这么操作是比较二,没有任何须要。 varbox=”网景”; varbox=”太阳”;还有一个变量不需要前面var关键字即可创建变量。这种变量和var变量有一定区分和作用范围,我们会在作用域那一节详细探讨。 soft=”微软”;当你想申明多个语句时候,能够在一行或者多行操作。 varwang=”网景”;varsun=”太阳”;而当你每条语句都在不一样行时候,你能够省略分号。(PS:这是ECMAScript支持,但绝对是一个非常不好编程习惯,切记不要)。 varwang=”网景” varsun=”太阳” varsoft=”微软”能够使用一条语句定义多个变量,只要把每个变量(初始化或者不初始化均可)用逗号分隔开即可,为了可读性,每个变量,最好另起一行,而且第二变量和第一变量对齐(这些都不是必须额)。 varwang=”网景”,sun=”太阳”,soft=”微软”; //写在一行 varwang=”网景, //为了可读性,提议换行写 sun=”太阳”, soft=”微软”;数据类型ECMAScript中有5种简单数据类型:Undefined、Null、Boolean、Number和String。还有一个复杂数据类型—Object。ECMAScript不支持任何创建自定义类型机制,全部值都成为以上6中数据类型之一。typeof操作符typeof操作符是用来检测变量数据类型。对于值或变量使用typeof操作符会返回以下字符串。注:typeof返回数据类型字符串是小写,而数据类型本身是首字母是大写。varsun=”太阳”;alert(typeofsun); //或者:alert(typeof(sun));typeof操作符能够操作变量,也能够操作字面量。typeof也能够这么使用:typeof(box),(函数使用方法:加小括号)不过,typeof是操作符而非内置函数。PS:函数在ECMAScript中是对象,不是一个数据类型,所以,使用typeof来区分function和object是非常有必要。varbox;alert(typeofbox); //box是Undefined类型,值是undefined,类型返回字符串是undefinedvarbox=true;alert(typeofbox); //box是Boolean类型,值是true,类型返回字符串是boolean varbox=”网景”; alert(typeofbox); //box是String类型,值是”网景”,类型返回字符串是string varbox=200; alert(typeofbox); //box是Number类型,值是200,类型返回字符串是number varbox={}; //另一个创建对象写法:varbox=newObject(); alert(typeofbox); //box是Object类型,值是[objectObject],类型返回字符串是object //空对象,表示这个对象创建了,里面没有东西 //空对象,表示没有创建,就是一个null varbox=null; alert(typeofbox); //box是Null类型,值是null,类型返回字符串是object //Null类型也是Object对象一个 functionbox(){}; alert(typeofbox); //box是Function函数,值是functionbox(){},类型返回字符串是functionUndefined类型Undefined类型只有一个值,即特殊undefined。在使用var申明变量,但没有对其初始化时,这个变量值就是undefined。 varbox; alert(box);PS:我们没有必要给一个变量赋值为undefined,因为没有赋值变量会隐式(自动)赋值为undefined;而undefined主要目标是为了用于比较,ECMAScript第三版之前并没有引入这个值,引入之后为了证实区分空对象与未经初始化变量。 varbox=undefined; //没有必要 alert(box);未初始化变量与根本不存在变量(未申明变量)也是不一样。 varbox; alert(age); //会报错:ageisnotdefinedPS:假如typeofbox,typeofage都返回undefined。从逻辑上思索,他们值,一个是undefined,一个报错;他们类型返回字符串(typeof),却都是undefined。所以,我们在定义变量时候,尽可能不要只申明,不赋值。 varbox; alert(typeofbox); alert(typeofage); //以后申明一个变量就必须初始化,以防止这种问题Null类型Null类型是一个只有一个值得数据类型,即特殊值null。它表示一个空对象引用(指针),而typeof操作符检测null会返回object。 varbox=null; alert(typeofbox);假如定义变量准备在未来用于保留对象,那么最好将该变量初始化为null。这么,当检验null值就知道变量是否已经分配了对象引用了。 varbox=null; //这个表示,你还没有创建对象,但先申明了对象引用而必须初始化结果 //你还没有来得及创建对象,先申明一个对象变量放在那边,默认初始化为null有个要说明是:undefined是派生自null,所以ECMA-262要求对它们相等性测试返回true。 alert(undefined==null); //返回truealert(undefined===null); //返回false因为undefined和null两个值得比较是相等,所以,未初始化变量和赋值为null变量会相等。这时,能够采取typeof变量类型进行比较。但,提议还是养成编码规范,不要忘记初始化变量。 varbox; varcar=null; alert(typeofbox==typeofcar); //返回false varobj=null; obj={}; varstr=””; · //字符串初始化,用引号 varnum=0; //数值初始6化,通惯用0 varboo=false/true; //布尔值初始化,用false或者true都行Boolean类型Boolean类型有两个值(字面量):true和false。而true不一定等于1,false不一定等于0,JavaScript是区分大小写,True和False或者其余都不是Boolean类型值。 varbox=true; alert(typeofbox);即使Boolean类型字面量只有true和false两种,但ECMAScript中全部类型值都有与这两个Boolean值等价值。要将一个值转换为其对应Boolean值,能够使用转型函数Boolean()。 varhello=”HelloWorld”; alert(typeofhello); //返回string hello=Boolean(hello); alert(typeofhello); //返回boolean上面是一个显示转换,属于强制性转换。而实际应用中,还有一个隐式转换。比如,在if条件语句里面条件判断,就存在隐式转换。 varhello=”HelloWorld”; if(hello){ alert(“假如条件为true,就执行这条语句”);}else{ alert(“假如条件为false,就执行这条语句”);}Number类型Number类型包含两种数值:整型和浮点型。为了支持各种数值类型,ECMA-262定义了不一样数值字面量格式。最基本数值字面量是十进制整数。 varbox=100; //十进制整数八进制数值字面量,(以8为基数),前导必须是0,八进制序列(0~7)。 varbox=070; //八进制,十进制为56 varbox=079; //无效八进制,自动解析为79十六进制字面量前面两位必须是0x,后面是(0~9及A~F(大小写均可))。 varbox=0xA; //十六进制,10 varbox=0x1f; //十六进制,31浮点类型,就是该数值中必须包含一个小数点,而且小数点后面必须最少有一位数字。 varbox=3.8; varbox=0.8; varbox=.8; //有效,但不推荐此写法 因为保留浮点数值需要内存空间比整型数值大两倍,所以ECMAScript会自动将能够转换为整型浮点数值转成为整型。 varbox=8.; //小数点后面没有值,转换为8 varbox=12.0; //小数点后面是0,转成为12对于那些过大或过小数值,能够用科学计数法来表示(e表示法)。用e表示该数值前面10指数次幂。 varbox=4.12e9; //即410000 varbox=0.000056; //即5.6e-5即使浮点数值最高精度是17位小数,但算术运算中可能不精准。因为这个原因,做判断时候一定要考虑到这个问题(比如使用整型判断)。 alert(0.1+0.2); //返回:0.00004浮点数值范围在:Number.MIN_VALUE~Number.MAX_VALUE之间。 alert(Number.MIN_VALUE); //最小值 alert(Number.MAX_VALUE); //最大值假如超出了浮点数数值范围最大值或最小值,那么就先出现Infinity(正无穷)或者-Infinity(负无穷)。 varbox=100e1000; //超出范围,Infinity varbox=-100e1000; //超出范围,-Infinity也能够经过Number.POSITIVE_INFINITY和Number.NEGATIVE_INFINITY得到Infinity(正无穷)及-Infinity(负无穷)值。 alert(Number.POSITIVE_INFINITY); //返回Infinity alert(Number.NEGATIVE_INFINITY); //返回-Infinity要想确定一个数值是否超出了要求范围,能够使用isFinite()函数。假如没有超出,返回true,超出了返回false。 varbox=10e1000; alert(isFinite(box)); //返回falseNaN,即非数值(NotaNumber)是一个特殊值,这个数值用于表示一个原来要返回数值操作数未返回数值情况(这么就不会抛犯错误了)。比如,在其余语言中,任何数值除以0都会造成错误而终止程序执行。但在ECMAScript中,会返回特殊值,所以不会影响程序执行。 varbox=0/0; //NaN varbox=12/0; //Infinity varbox=12/0*0; //NaN能够经过Number.NaN得到NaN值,任何与NaN进行运算结果均为NaN,NaN与本身不相等(NaN不予任何值相等)。 alert(Number.NaN); //NaN alert(NaN); //NaN alert(NaN+1); //NaN alert(NaN==NaN); //falseECMAScript提供了isNaN()函数,用来判断这个值到底是不是NaN。isNaN()函数在接收到一个值之后,会尝试将这个值转换为数值。 alert(isNaN(NaN)); //true alert(isNaN(25)); //false,25是一个数值 alert(isNaN(‘25’)); //false,’25’是一个字符串数值,可恶意转换成数值 alert(isNaN(‘lee’)); //true,’lee’不能转换为数值 alert(isNaN(true)); //false true能够转换为数值1isNaN()函数也适适用于对象。在调用isNaN()函数过程中,首先会调用valueOf()方法,然后确定返回值是否能够转换成数值。假如不能,则基于这个返回值再调用toString()方法,再测试返回值。 varbox={ toString:function(){ return‘123’; //能够改成return‘lee’查看效果}} alert(isNaN(box)); //false有3个函数能够把非数值转换为数值:Number()、parseInt()和parseFloat()。Number()函数是转型函数,能够用于任何数据类型,而另外两个则专门用于把字符串转成数值。 alert(Number(true)); //1,Boolean类型true和false分别转换成1和0 alert(Number(25)); //25,数值型直接返回 alert(Number(null)); //0,空对象返回0 alert(Number(undefined)); //NaN,undefined返回NaN假如是字符串,应该遵照以下规则:只包含数值字符串,会直接转成十进制数值,假如包含前导0,即自动去掉。alert(Number(‘456’)); //456alert(Number(‘070’)); //70只包含浮点数值字符串,会直接转成浮点数值,假如包含前导和后导0,即自动去掉。alert(Number(‘08.90’)); //8.9假如字符串是空,那么直接转换成0。alert(Number(‘’)); //0假如不是以上三种字符串类型,则返回NaN。alert(Number(‘Lee123’)); //NaN假如是对象,首先会调用valueOf()方法,然后确定返回值是否能够转换成数值。假如转换结果是NaN,则基于这个返回值再调用toString()方法,在测试返回值。varbox={ toString:function(){ return‘123’; //能够改成return‘lee’查看效果}} alert(Number(box)); //123因为Number()函数在转换字符串时比较复杂且不够合理,所以在处理整数时候更惯用是parseInt()。 alert(parseInt(‘456Lee’)); //456,会返回整数部分 alert(parseInt(‘Lee456Lee’)); //NaN,假如第一个不是数值,就返回NaN alert(parseInt(‘12Lee456Lee’)); //12,从第一数值开始取,到最终一个连续数值结束 alert(parseInt(’56.12’)); //56,小数点不是数值,会被去掉 alert(parseInt(‘’)); //NaN,空返回NaNparseInt()除了能够识别十进制数值,也能够识别八进制和十六进制。 alert(parseInt(‘0xA’)); //10,十六进制 alert(parseInt(‘070’)); //56,八进制 alert(parseInt(‘0xALee’)); //10,十六进制,Lee会自动被过滤掉ECMAScript为parseInt()提供了第二个参数,用于处理各种进制转换。 alert(parseInt(‘0xAF’)); //175,十六进制 alert(parseInt(‘AF’,16)); //175,第二参数指定十六进制,能够去掉0x前导 alert(parseInt(‘AF’)); //NaN,理所当然 alert(parseInt(‘’,2)); //314,二进制转换 alert(parseInt(‘70’,8)); //56,八进制转换parseFloat()是用于浮点数值转换,和parseInt()一样,从第一位解析到非浮点数值位置。 alert(parseFloat(‘123Lee’)); //132,去掉不是数值部分 alert(parseFloat(‘0xA‘)); //0,不认十六进制 alert(parseFloat(‘123.4.5’)); //123.4,只认一个小数点 alert(parseFloat(‘0123.400’)); //123.4,去掉前后导 alert(parseFloat(‘1.234e7’)); //12340000,把科学计数法转成普通数值String类型String类型用于表示由零或多个16位Unicode字符组成字符序列,即字符串。字符串能够由双引号(“”)或单引号(‘’)表示。 varbox=”Lee”; varbox=’Lee’;PS:在一些其余语言(PHP)中,单引号和双引号表示字符串解析方式不一样,而ECMAScript中,这两种表示方法没有任何而区分。但要切记是,必须成对出现,不能穿插使用,不然会犯错。 varbox=’Lee”; //犯错String类型包含了一些特殊字符字面量,也就叫转义序列。ECMAScript中字符串是不可变,也就是说,字符串一旦创建,它们值就不能改变。要改变某个变量保留字符串,首先要销毁原来字符串,然后再用另一个包含新值字符串填充该变量。(把原来在内存中开辟空间销毁,重新开辟一块空间)toString()方法能够把值转换成字符串。 varbox=11; varbox=true; alert(typeofbox.toString());toString()方法通常是不需要传参,但在数值转成字符串时候,能够传递进制参数。 varbox=10; alert(box.toString()); //10,默认输出 alert(box.toString(2)); //1010,二进制输出 alert(box.toString(8)); //12,八进制输出 alert(box.toString(10)); //10,十进制输出 alert(box.toString(16)); //a,十六进制输出假如在转型之前不知道变量是否是null或者undefined情况下,我们还能够使用转型函数String(),这个函数能够将任何类型值转换为字符串。 varbox=null; alert(String(box)); //会返回字符串:null;PS:假如值有toString()方法,则调用该方法并返回对应结果;假如是null或者undefined,则返回”null”或者”undefined”。Object类型ECMAScript中对象其实就是一组数据和功效集合。对象能够经过执行new操作符后跟要创建对象类型名称来创建。 varbox=newObject();Object是对象结构,假如对象初始化时不需要传递参数,能够不用写括号,但这种方式我们不推荐。 varbox=newObject; //不推荐Object里能够任意传参,能够传数值、字符串、布尔值等。而且,还能够进行对应计算。 varbox=newObject(2); //Object类型,值是2 varage=box+2; //能够和普通变量运算 alert(typeofbox); //Object类型PS:面向对象是JavaScript课程重点,这里我们只是简单做个介绍。详细课程将在以后章节继续学习。运算符ECMA-262描述了一组用于操作数据值运算符,包含一元运算符、布尔运算符、算术运算符、关系运算符、三元运算符、位运算符以及赋值运算符。ECMAScript中运算符适适用于很多值,包含字符串、数值、布尔值、对象等。不过经过上一章我们也了解到,应用于对象是通常会调用对象valueOf()和toString()方法,方便取得对应值。PS:前面章节我们讲过typeof操作符、new操作符,也能够称之为typeof运算符、new运算符,是同一个意思。什么是表示式表示式是ECMAScript中一个“短语“,解释器会经过计算把它转换成一个值。最简单表示式是字面量或者变量名。比如://数值字面量‘Lee’ //字符串字面量true //布尔值字面量null //空值字面量/java/ //正则表示式字面量{x:1,y:2} //对象字面量、对象表示式[1,2,3] //数组字面量、数组表示式function(n){ //函数字面量、函数表示式returnx+y;}box //变量当然,还能够经过合并简单表示式来创建复杂表示式。比如: box+5.96 //加法运算表示式 typeof(box) //查看数据类型表示式 box>8 //逻辑运算表示式经过上面叙述,我们得知,单一字面量和组合字面量运算符都可成为表示式。一元运算符只能操作一个值运算符叫做一元运算符。递增++和递减—varbox=100; ++box; //把box累加一个1,相当于box=box+1--box; //把box累减一个1,相当于box=box-1box++; //同上box--; //同上前置和后置区分在没有赋值操作,前置和后置是一样。但在赋值操作时,假如递增或递减运算符前置,那么前置运算符会先累加或累减在赋值,假如是后置运算符则先赋值在累加或累减。 varbox=100; varage=++box; //age值为101 varheight=box++; //height值为100其余类型应用一元运算符规则 varbox=’89’; box++; //90,数值字符串自动转换成数值 varbox=’ab’;box++; //NaN,字符串包含非数值转成NaN varbox=false;box++; //1,false转成数值是0,累加就是1 varbox=2.3; box++; //3.3,直接加1 varbox={ //1,不设置toString或valueOf即为NaN toString:function(){ return1;}}; box++;加和减运算符加:varbox=100; +box; //100,对于数值,不会产生任何影响varbox=’89’; +box; //89,数值字符串转换成数值varbox=’ab’; +box; //NaN,字符串包含非数值转成NaNvarbox=false; +box; //0,布尔值转换成对应数值varbox=2.3; +box; //2.3,没有改变varbox={ //1,不设置toSting或valueOf即为NaN toString:function(){ return1;}}; +box; 减:varbox=100; -box; //-100,对于数值,直接变负varbox=’89’; -box; //-89,数值字符串转换成数值varbox=’ab’; -box; //NaN,字符串包含非数值转成NaNvarbox=false; -box; //0,布尔值转换成对应数值varbox=2.3; -box; //-2.3,没有改变varbox={ //-1,不设置toSting或valueOf即为NaN toString:function(){ return1;}}; -box;加法和减法运算符通惯用于算术运算,也可向上面进行类型转换。算术运算符ECMAScript定义了5个算术运算符,加减乘除求模(取余)。假如在算术运算值不是数值,那么后台会先使用Number()转型函数将其转换为数值(隐式转换)。加法varbox=1+2; //等于3varbox=1+NaN; //NaN,只要有一个NaN就为NaNvarbox=Infinity+Infinity; //Infinityvarbox=-Infinity+-Infinity; //-Infinityvarbox=Infinity+-Infinity; //NaN,正无穷和负无穷相加等于NaNvarbox=100+’100’; //100100,字符串连接符,有字符串就不是加法varbox=’您年纪是:’+10+20; //您年纪是:1020,被转换成字符串varbox=10+20+’是您年纪’; //30是您年纪,没有被转成字符串varbox=’您年纪是:’+(10+20); //您年纪是:30,没有被转成字符串varbox=10+对象; /*10[objectObject],假如有toString()或valueOf() 则返回10+返回数值*/减法varbox=100-70; //等于30varbox=-100-70; //等于-170varbox=-100--70; //-30,通常写成-100-(-70)比较清楚varbox=1-NaN; //NaN,只要有一个NaN就为NaNvarbox=Infinity-Infinity; //NaNvarbox=-Infinity--Infinity; //NaNvarbox=Infinity--Infinity; //Infinityvarbox=-Infinity-Infinity; //-Infinityvarbox=100-true; //99,true转成数值1varbox=100-‘’; //100,’’转成了0varbox=100-‘70’; //30,’70’转成了数值70varbox=100-null; //100,null转成了0varbox=100-‘Lee’; //NaN,Lee转成了NaNvarbox=100-对象 /*NaN,假如有toString()或valueOf() 则返回10-返回数值*/乘法varbox=100*70; //7000;varbox=100*NaN; //NaN,只要有一个NaN即为NaNvarbox=Infinity*Infinity; //Infinityvarbox=-Infinity*Infinity; //-Infinityvarbox=-Infinity*-Infinity; //Infinityvarbox=100*true; //100,true转成数值为1varbox=100*’’; //0,’’转成了0varbox=100*null; //0,null转成了0varbox=100*’Lee’; //NaN,Lee转成了NaNvarbox=100*对象 /*NaN,假如有toString()或valueOf() 则返回10-返回数值*/除法varbox=100/70; //1.42……varbox=100/NaN; //NaNvarbox=Infinity/Infinity; //NaNvarbox=-Infinity/Infinity; //NaNvarbox=-Infinity/-Infinity; //NaNvarbox=100/true; //100,true转成了1varbox=100/’’; //Infinityvarbox=100/null; //Infinityvarbox=100/’Lee’; //NaNvarbox=100/对象; /*NaN,假如有toString()或valueOf() 则返回10/返回数值*/求模varbox=10%3; //1,余数为1varbox=100%NaN; //NaNvarbox=Infinity%Infinity; //NaNvarbox=-Infinity%Infinity; //NaNvarbox=-Infinity%-Infinity; //NaNvarbox=100%true; //0varbox=100%’’; //NaNvarbox=100%null; //NaNvarbox=100%’Lee’; //NaNvarbox=100%对象; /*NaN,假如有toString()或valueOf() 则返回10%返回数值*/关系运算符用于进行比较运算符成为关系运算符:小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、相等(==)、不等(!=)、全等(恒定)(===)、不全等(不恒等)(!==)和其余运算符一样,当关系运算符操作非数值时要遵照以下规则:两个操作数都是数值,则数值比较;两个操作数都是字符串,则比较两个字符串对应字符编码值;两个操作数有一个是数值,则将另一个转换为数值,在进行数值比较;两个操作数有一个是对象,则先调用valueOf()方法或toString()方法,再用结果比较;varbox=3>2; //truevarbox=3>22; //falsevarbox=’3’>22; //falsevarbox=’3’>’22’; //truevarbox=’a’>’b’; //falsea=97,b=98varbox=’a’>’B’; //trueB=66varbox=1>对象; //false,假如有toString()或valueOf()则返回1>返回数值在相等和不等比较上,假如操作数是非数值,则遵照以下规则:一个操作数是布尔值,则比较之间将其转换为数值,false转成0,true转成;一个操作数是字符串,则比较之前将其转成为数值在比较;一个操作数是对象,则先调用valueOf()或toString()方法后再和返回值比较;不需要任何转换情况下,null和undefined是相等;一个操作数是NaN,则==返回false,!=返回true;而且NaN和本身不等;两个操作数都是对象,则比较他们是否是同一个对象,假如都指向同一个对象,则返回true,不然返回false;在全等和全不等判断上,比如值和类型都相等,才返回true,不然返回false。varbox=2==2; //truevarbox=’2’==2; //true,’2’会转换成数值2varbox=false==0; //true,false转成数值都是0varbox=’a’==’A’; //false,执行toString()或valueOf()会改变varbox=2=={}; //false,只要有NaN,都是falsevarbox={}=={}; //false,比较是他们地址,每个新创建对象引用地址都不一样varage={};varheight=age;varbox=age==height; //true,引用地址一样,所以相等varbox=’2’===2; //false,值和类型都必须相等varbox=2!==2; //false,值和类型都相等了逻辑运算符逻辑运算符通惯用于布尔值地操作,通常和关机运算符配合使用,有三个逻辑运算符:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)。逻辑与(AND):&&varbox=(5>4)&&(4>3) //true,两边都为true,返回true假如两边操作数有一个操作数不是布尔值地情况下,与运算就不一定返回布尔值,此时,遵照以下规则:第一个操作舒适对象,则返回第二个操作数;第二个操作数是对象,则第一个操作数返回true,才返回第二个操作数,不然返回false;有一个操作数是null,则返回null;有一个操作数是undefined,则返回undefined。varbox=对象&&(5>4); //true,返回第二操作数varbox=(5>4)&&对象; //[objectObject]varbox=(3>4)&&对象; //falsevarbox=(5>4)&&null; //null逻辑与运算符属于短路操作,顾名思义,假如第一个操作数返回时false,第二个数不论是true还是false都返回false。 varbox=true&&age; //犯错,age未定义 varbox=false&&age; //false,不执性age了逻辑或(OR):||varbox=(9>7)||(7>8); //true,两边只要有一边是true,返回true假如两边操作数有一个操作数不是布尔值情况下,逻辑与运算就不一定返回布尔值,此时,遵照以下规则:第一个操作数是对象,则返回第一个操作数;第一个操作数求值结果为false而,则返回第一个操作数;两个操作数都是对象,则返回第一个操作数;两个操作数都是null,则返回null;两个操作数都是NaN,则返回NaN;两个操作数都是undefined,则返回undefined;varbox=对象||(5>3); //[objectObject]varbox=(5>3)||对象; //truevarbox=对象1||对象2; //[objectObject]varbox=null||null; //nullvarbox=NaN||NaN; //NaNvarbox=undefined||undefined; //undefined和逻辑与运算符相同,逻辑或运算符也是短路操作。当第一个操作数求值结果味儿true,就不会对第二个操作数求值了。 varbox=true||age; //true varbox=false||age; //犯错,age未定义我们能够利用逻辑或运算符这一特征来防止为变量赋null或undefined值。 varbox=oneObject||twoObject; //把其中一个有效变量值赋给box逻辑非(NOT):! 逻辑非运算符能够用于任何值。不论这个值是什么恶什么数据类型,这个运算符都会返回一个布尔值。他流程是:先将这个值转换成布尔值,然后去反,规则以下:操作数是一个对象,返回false;操作数是一个空字符串,返回true;操作数是一个非空字符串,返回false;操作数是数值0,返回true;操作数是任意非0数值(包含Infinity),false而;操作数是null,返回true;操作数是NaN,返回true;操作数是undefined,返回true;varbox=!(5>4); //falsevarbox=!{}; //falsevarbox=!’’; //truevarbox=!’Lee’; //falsevarbox=!0; //truevarbox=!$; //falsevarbox=!null; //truevarbox=!NaN; //truevarbox=!undefined; //true使用一次逻辑非运算符,流程是将值转成布尔值然后去反。而使用两次逻辑非运算符就是将值转成布尔值取反再取反,相当于对值进行Boolean()转型函数处理。 varbox=!!0; //false varbox=!!NaN; //false通常来说,使用一个逻辑非运算符和两个逻辑非运算符能够得到对应布尔值,而使用三个以上逻辑非运算符当然没有错误,但也没有意义。位运算符PS:在通常应用中,我们基本上用不到位运算符。即使,它比较基于底层,性能和速度回非常好,而就是因为比较底层,使用难度也很大。所以,我们作为选学来对待。位运算符有七种,分别是:位非NOT(~)、位与AND(&)、位或OR(|)、位异或XOR(^)、左移(<<)、右符号右移(>>)、无符号右移(>>>). varbox=~25; //-267 varbox=25&3; //1 varbox=25|3; //27 varbox=25<<3; //200 varbox=25>>2; //6 varbox=25>>>2; //6赋值运算符赋值运算符用等于号(=)表示,就是把右边值赋给左边变量。 varbox=100; //把100赋值给box变量符合赋值运算符经过x=形式表示,x表示算术运算符及为运算符 varbox=100; box=box+100; //200,自己本身再加100这种情况能够改写为: varbox=100; box+=100; //200,+=代替box+100除了这种+=加/赋值运算符,还有其余几个以下:乘/赋(*=)除/赋(/=)模/赋(%=)加/赋(+=)减/赋(-=)左移/赋(<<=)有符号右移/赋(>>=)无符号右移/赋(>>>=)其余运算符字符串运算符字符串运算符只有一个,即:“+”。它作用是将两个字符串相加。规则:最少一个操作符是字符串即可。 varbox=’100’+’100’; //100100 varbox=’100’+100; //100100 varbox=100+100; //200符号运算符符号运算符能够在一条语句中执行多个操作 varbox=100,age=20,height=178; //多个变量申明 varbox=(1,2,3,4,5); //5,变量申明,将最终一个值赋给变量,不惯用 varbox=[1,2,3,4,5]; //[1,23,4,5],数组字面量申明 varbox={1:2,3:4,5:6}; //[objectObject],对象字面量申明三元条件运算符三元条件运算符其实就是后面将要学到if语句简写形式。 varbox=5>4?’对’:’错’; //对,5>4返回true则把’对’赋值给box,反之。相当于: varbox=’’; //初始化变量 if(5>4){ //判断表示式返回值 box=’对’; //赋值}else{ box=’错’; //赋值}运算符优先级在通常运算中,我们无须考虑到运算符优先级,因为我们能够经过圆括号来处理这种为题。比如: varbox=5-4*8; //-27 varbox=(5-4)*8; //8但假如没有使用圆括号强制优先级,我们必须遵照以下次序:流程控制语句ECMA-262要求了一组流程控制语句。语句定义了ECMAScript中主要语法,语句通常由一个或者多个关键字来完成给定任务。诸如:判断、循环、退出等。语句定义在ECMAScript中,全部代码都是由语句来组成。语句表明执行过程中流程、限定于约定,形式上能够是单行语句,或者由一对大括号“{}”括起来复合语句,在语法描述中,复合语句整体能够作为一个单行语句处理。sif语句if语句即条件判断语句,一共有三种格式:if(条件表示式)语句;varbox=100;if(box>50)alert(‘box大于50’); //一行if语句,判断后执行一条语句varbox=100;if(box>50) alert(‘box大于50’); //两行if语句,判断后也执行一条语句 alert(‘不论怎样,我都能被执行到’);varbox=100;if(box<50){ alert(‘box大于50’); alert(‘不论怎样,我都能被执行到’); //用复合语句包含,判断后执行一条复合语句}对于if语句括号里表示式,ECMAScript会自动调用Boolean()转型函数将这个表示式结果转换成一个布尔值。假如值为true,执行后面一条语句,不然不执行。PS:if语句括号里表示式假如为true,只会执行后面一条语句,假如有多条语句,那么就必须使用复合语句把多条语句包含在内。PS2:推荐使用第一个或者地三种格式,一行if语句,或者多行if复合语句。这么就不会因为多条语句而造成混乱。PS3:复合语句我们通常喜欢称作为:代码块。if(条件表示式){语句;}else{语句;};varbox=100;if(box>50){ alert(‘box大于50’); //条件为true,执行这个代码块}else{ alert(‘box小于50’); //条件为false,执行这个代码块}if(条件表示式){语句;}elseif(条件表示式;){语句;}……else{语句;}varbox=100;if(box>=100){ alert(‘甲’);}elseif(box>=90){ alert(‘乙’);}elseif(box>=80){ alert(‘丙’);}else{ alert(‘丁’);}switch语句switch语句是多重条件判断,用于多个值相等比较。 varbox=1; switch(box){ //用于判断box相等多个值 case1: alert(‘one’); break; //break,用于预防语句穿透 case2: alert(‘two’); break; case3: alert(‘three’); break; default: alert(‘other’);}do…while语句do…while语句是一个先运行,后判断循环语句。也就是说,不论条件是否满足,最少先运行一次循环体。 varbox=1; //假如是1,就执行五次,假如是10,执行1次 do{ alert(box); box++;}while(box<=5); //先运行一次,再判断while语句while语句是一个先判断,后运行循环语句。也就是说,必须满足条件了之后,方可运行循环体。 varbox=1; //假如是1,执行五次,假如是0,不执行 while(){ //先判断,再执行 alert(box); box++;}for语句for语句也是一个先判断,后运行循环语句。但它具备在执行循环之前初始变量和定义循环后要执行代码能力。 for(varbox=1;box<=5;box++){ //第一步,申明变量varbox=1; alert(box); //第二步,判断box<=5} //第三步,alert(bobx) //第四步,box++ //第五步,从第二步再来,直到判断为falsefor…in语句for…in语句是一个精准迭代语句,能够用来枚举对象属性。 varbox={ //创建一个对象 ‘name’:‘吴志涛’, //键值对,左边是属性名,右边是值 ‘age’:28; ‘height’:178}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论