JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。
历史:
它最初由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。
作用:
1、是一种解释性脚本语言(代码不进行预编译)。
2、主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
3、可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。
4、跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如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对象的属性拥有全局作用域
2. 局部作用域
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所以在一些地方也会看到有人把这种作用域称为函数作用域
关键字:
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 (循环判断条件);
数组处理
1、数组的创建
var arrayObj = new Array(); //创建一个数组
var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
注意:虽然这种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度,仍然可以将元素存储在规定长度以外的,这时长度会随之改变。
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值
2、数组的元素的访问
var testGetArrValue=arrayObj[1]; //获取数组的元素值
arrayObj[1]= "这是新值"; //给数组元素赋予新的值
3、数组元素的添加
arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。
4、数组元素的删除
arrayObj.pop(); //移除最后一个元素并返回该元素值
arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素
5、数组的截取和合并
arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制start 之后的所有元素
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组
6、数组的拷贝
arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向
7、数组元素的排序
arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
arrayObj.sort(); //对数组元素排序,返回数组地址
8、数组元素的字符串化
arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
toLocaleString 、toString 、valueOf:可以看作是join的特殊用法,不常用
JSON:
JSON:JavaScript 对象表示法(JavaScript Object Notation)。 是存储和交换文本信息的语法。
特点:
- JSON 是轻量级的文本数据交换格式
- JSON 独立于语言
- JSON 具有自我描述性,更易理解
- JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
在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 };
转换:
1、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()函数处理后会有错误(抛出语法异常)。
2、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)
1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
function closure(){
var str = "I'm a part variable.";
return function(){
alert(str);
}
}
var fObj = closure();
fObj();
|