热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。历史:它最初由Netscape的BrendanEich设计。Ja

 

 

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();

 

 
 
 
 
 
 
 
 
  在上面代码中,str是定义在函数closure中局部变量,若str在closure函数调用完成以后不能再被访问,则在函数执行完成后str将被释放。但是由于函数closure返回了一个内部函数,且这个返回的函数引用了str变量,导致了str可能会在closure函数执行完成以后还会被引用,所以str所占用的资源不会被回收。这样closure就形成了一个闭包。

     

 


推荐阅读
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
author-avatar
多米音乐_35753491
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有