什么是javascript语言,它的历史、做用、基本语法(变量、表达式、做用域、各类关键字和流程控制语句)、数组处理、json、闭包(closure)。

 

 

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对象的属性拥有全局做用域

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 (循环判断条件);

数组处理

 

一、数组的建立

 

  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 是轻量级的文本数据交换格式
  • 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 };

转换: 

一、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)

官方对闭包的解释是: 一个拥有许多变量和绑定了这些变量的环境的表达式(一般是一个函数),于是这些变量也是该表达式的一部分
 
闭包的特色:
  1.做为一个函数变量的一个引用,当函数返回时,其处于激活状态。
  2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

  简单的说,javascript容许使用内部函数---即函数定义和函数表达式位于另外一个函数的函数体内。并且,这些内部函数能够访问它们所在的外部函数中声明的全部局部变量、参数和声明的其余内部函数。当其中一个这样的内部函数在包含它们的外部函数以外被调用时,就会造成闭包。

 

  function closure(){
    var str = "I'm a part variable.";
    return function(){
      alert(str);
    }
  }
  var fObj = closure();
  fObj();

 

 
 
 
 
 
 
 
 
  在上面代码中,str是定义在函数closure中局部变量,若str在closure函数调用完成之后不能再被访问,则在函数执行完成后str将被释放。可是因为函数closure返回了一个内部函数,且这个返回的函数引用了str变量,致使了str可能会在closure函数执行完成之后还会被引用,因此str所占用的资源不会被回收。这样closure就造成了一个闭包。
相关文章
相关标签/搜索