JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。javascript
历史:java
它最初由Netscape的Brendan Eich设计。JavaScript是甲骨文公司的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也能够用于其余场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。Netscape在最初将其脚本语言命名LiveScript,后来Netscape在与Sun合做以后将其更名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,所以语法上有相似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。为了取得技术优点,微软推出了JScript来迎战JavaScript的脚本语言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)建立了ECMA-262标准(ECMAScript)。二者都属于ECMAScript的实现。尽管JavaScript做为给非程序人员的脚本语言,而非做为给程序人员的脚本语言来推广和宣传,可是JavaScript具备很是丰富的特性。编程
发展初期,JavaScript的标准并未肯定,同期有Netscape的JavaScript,微软的JScript和CEnvi的ScriptEase三足鼎立。1997年,在ECMA(欧洲计算机制造商协会)的协调下,由Netscape、Sun、微软、Borland组成的工做组肯定统一标准:ECMA-262。json
做用:数组
一、是一种解释性脚本语言(代码不进行预编译)。浏览器
二、主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。服务器
三、能够直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。闭包
四、跨平台特性,在绝大多数浏览器的支持下,能够在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)编程语言
基本语法(变量、表达式、做用域、各类关键字和流程控制语句)函数
变量:与代数同样,JavaScript 变量可用于存放值(好比 x=2)和表达式(好比 c=a+b)。
变量可使用短名称(好比 a 和 b),也可使用描述性更好的名称(好比 name、height)。
注意:变量必须以字母开头
变量也能以 $ 和 _ 符号开头(不过咱们不推荐这么作)
变量名称对大小写敏感(y 和 Y 是不一样的变量)
提示:JavaScript 语句和 JavaScript 变量都对大小写敏感。
表达式: javascript表达式在定义完变量后,就能够进行赋值、改变和计算等一系列操做。这一过程一般又由表达式来完成。
做用域:做用域就是变量与函数的可访问范围,即做用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的做用域有全局做用域和局部做用域两种
1. 全局做用域:在代码中任何地方都能访问到的对象拥有全局做用域
(1)最外层函数和在最外层函数外面定义的变量拥有全局做用域
(2)全部末定义直接赋值的变量自动声明为拥有全局做用域
(3)全部window对象的属性拥有全局做用域
和全局做用域相反,局部做用域通常只在固定的代码片断内可访问到,最多见的例如函数内部,因此在一些地方也会看到有人把这种做用域称为函数做用域
关键字:
Javascript关键字列表:
break | delete | function | return | typeof |
case | do | if | switch | var |
catch | else | in | this | void |
continue | false | instanceof | throw | while |
debugger | finally | new | true | with |
default | for | null | try |
Javascript将来关键字(Javascript Future Reserved Words)
Javascript还有一些将来关键字,这些字虽然如今没有用到Javascript语言中,可是未来有可能用到。
Javascript将来关键字列表:
abstract | double | goto | native | static |
boolean | enum | implements | package | super |
byte | export | import | private | synchronized |
char | extends | int | protected | throws |
class | final | interface | public | transient |
const | float | long | short | volatile |
流程控制语句
1.if语句的语法结构
if (条件表达式A) {
//条件表达式A为true,所执行的代码块
} else if(条件表达式B) {
//条件表达式B为true,所执行的代码块
} else {
// 条件表达式A和条件表达式B都为false,所执行的代码块
}
2.switch语句的语法结构
switch (表达式) {
case 值1 :
//表达式与值1匹配时,所执行的代码块
break;
case 值2 :
//表达式与值2匹配时,所执行的代码块
break;
default :
//全部case值都与表达式不匹配时,所执行的代码块
}
3.for语句的语法结构
for (初始化语句; 循环判断条件; 循环执行语句) {
//循环体
}
4.while语句的语法结构
while (循环判断条件) {
//循环体
}
5.do…while语句的语法结构
do {
//循环体
} while (循环判断条件);
数组处理
一、数组的建立
var arrayObj = new Array(); //建立一个数组
var arrayObj = new Array([size]); //建立一个数组并指定长度,注意不是上限,是长度
注意:虽然这种方法建立数组指定了长度,但实际上全部状况下数组都是变长的,也就是说即便指定了长度,仍然能够将元素存储在规定长度之外的,这时长度会随之改变。
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 建立一个数组并赋值
二、数组的元素的访问
var testGetArrValue=arrayObj[1]; //获取数组的元素值
arrayObj[1]= "这是新值"; //给数组元素赋予新的值
三、数组元素的添加
arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。
四、数组元素的删除
arrayObj.pop(); //移除最后一个元素并返回该元素值
arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素
五、数组的截取和合并
arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,若是省略 end 将复制start 以后的全部元素
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也能够是字符串,或者是数组和字符串的混合)链接为一个数组,返回链接好的新的数组
六、数组的拷贝
arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向
七、数组元素的排序
arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
arrayObj.sort(); //对数组元素排序,返回数组地址
八、数组元素的字符串化
arrayObj.join(separator); //返回字符串,这个字符串将数组的每个元素值链接在一块儿,中间用 separator 隔开。
toLocaleString 、toString 、valueOf:能够看做是join的特殊用法,不经常使用
JSON:
JSON:JavaScript 对象表示法(JavaScript Object Notation)。 是存储和交换文本信息的语法。
特色:
在JSON中,有两种结构:对象和数组。
1. 一个对象以 " { " 开始," } " 结束。每一个"名称"后跟一个" : " ;"名称:值" 组”之间运用 " , " 隔开。名称用 双引号 包起来;值若是是字符串则必须用 双引号 ,数值型则不须要。例如:
var obj={"name":"Rue","age":21,"hobby":"running"};
2. 数组是值(value)的有序集合。一个数组以" [ " 开始," ] " 结束。值之间运用 " , " 隔开。例如:
var array=[
{"name":"Rue","age":21,"hobby":"running"},
{"name":"Sandra","age":20,"hobby":"reading"}
];
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操做的是JSON对象,因此,JSON对象和JSON字符串之间的相互转换是关键,例如:
JSON字符串:var str_obj1 = ' { "name": "Rue", "age": 21} ';
JSON对象:var str_obj2 = {"name": "Rue", "age": 21 };
转换:
一、JSON字符串转换为JSON对象 :运用 eval() 函数、parseJSON() 、或者 parse()
要运用上面的str_obj1 ,必须运用下面的要领先转化为JSON对象:
var final_obj = eval('(' + str + ')'); //由JSON字符串转换为JSON对象 或者
var final_obj = str.parseJSON(); //由JSON字符串转换为JSON对象 或者
var final_obj = JSON.parse(str); //由JSON字符串转换为JSON对象
读取方式:alert(final_obj .name); alert(final_obj .age);
注意:若是final_obj 原本就是一个JSON对象,那么运用 eval()函数转换后(哪怕是屡次转换)仍是JSON对象,可是运用 parseJSON()函数处理后会有错误(抛出语法异常)。
二、JSON对象转换为JSON字符串 :运用 toJSONString()或者全局要领 JSON.stringify(),例如:
var final_obj =str_obj2 .toJSONString(); //将JSON对象转化为JSON字符 或者
var final_obj =JSON.stringify(str_obj2 ); //将JSON对象转化为JSON字符
注意:上面的多个要领中,除了eval()函数是js自带的以外,其余的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),然后者变成了 String.parseJSON()。若是提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本过低。
闭包(closure)
function closure(){
var str = "I'm a part variable.";
return function(){
alert(str);
}
}
var fObj = closure();
fObj();
|