JavaScript概述
JavaScript,常常被称之为Web语言。这么称呼不是没有原因的,因为最早JavaScript就是被用来制作网页特效和表单验证的。可以这么说,JavaScript从一 开始就是为我们Web所服务的。同时,JavaScript有着学习简单,容易上手的特点。比起其他像Java, C#这种传统编程语言,
JavaScript可算是相当容易学习的。甚至不需要搭载什么复杂的运行环境,只需要安装一一个浏览器,再用一个记事本就可以开始写JavaScript代码了。
但是,JavaScript往往又是一门棘手的语言。因为它的简单,为它本身带来了诸多的问题。还有各种各样的版本,令人疑惑的名称,常常也是让初学者摸不清头脑。甚至在JavaScript里所存在的一些特殊现象,即使是经验丰富的JavaScript开发人员,如果没有认真学习过的话也无法真正理解。要解释清楚JavaScript为什么是- - ]棘手的语言,我们首先不得不从它的发展史讲起。
JavaScript起源
JavaScript首次出现是在1995年,当年JavaScript的诞生 绝不是偶然的。在1992年, - -个叫做Nombas的公司开发了- -个]叫做"C减减"(C minus minus, Cmm)的语言,后来改名为
ScriptEase。ScriptEase最 初的设计是将一种微型脚本语言与-个叫做Espresso Page的工具配合,使脚本能够在浏览器中运行,因此ScriptEase成为 了第一个客户端脚本语言。到目前为止,我们仍然可以在该语言的官方网站http://scriptease.info
在ScriptEase出现以后,有一家叫做网景的公司,该公司也是世界上第一个将浏览器商用的公司。它们也想独立开发-种与ScriptEase相似的客户端脚本语言。于是,该公司的-个名叫布兰登,艾奇的人接受了这个任务,开始开发这门脚本语言。该语言的语法借鉴了Java, Perl, C,Self, Scheme等编程语言。布兰登.艾奇仅仅花了10天时间,就写出来了这门语言。起初,这个语言的目标是为了非专业的开发人员(如网站设计者),提供一个方便的工具。 因为大多数网站设计者都没有任何的编程背景,所以这个语言应该尽可能简单,易学,最终一 个弱类型的动态解释语言LiveWire就此诞生。LiveWire没过多 久就改名为了LiveScript了,直到现在,在一些古老的Web页面中还能看到这个名字。10天就写出来的东西,里面必然是存在很多问题的。这里面所存在的问题,有些遗留到至今都没有解决。有些问题现在反而还成了这门语言的一个特点。
在LiveScript诞生之前,Java applet曾经被热炒。之前Sun公司- -直在不遗余力地推广Java,宣称Java applet将会改变人们浏览网页的方式。然而市场并没有像Sun公司预期的那样好,这很大程度上是因为Java applet速度慢而且操作不便。网景公司的市场部]抓住了这个机遇,与Sun合作完成了LiveScript在浏览器端的实现,并在网景的Navigator2.0发布前,将LiveScript更名为 了JavaScript。网景公司为了取得Sun公司的支持,把JavaScript称之为Java applet和HTML的补充工具。
JavaScript版本介绍
说到JavaScript的版本,大致可以分为两种,一 种是JavaScript版本,另-种是ECMAScript版本。我们知道,ECMAScript就 是JavaScript的一个标准,而JavaScript是 ECMAScript的- -种实现。还有一点要明白的是,实现了ECMAScript的可不仅仅只有JavaScript,还有诸如ADOBE公司旗下的Flash所用到ActionScript,也可以看作是ECMAScript的- -种实现。
关于JavaScript版本,目前只有Mozilla公司,还在继续沿用最初的JavaScript版本编号序列对应的版本号如下表:
浏览器 JavaScript版本
Netscape Navigator2 1.0
Netscape Navigator3 1.1
Netscape Navigator4 1.2
Netscape Navigator4.06 1.3
Netscape6+ 1.5
注释
在JavaScript中,我们可以分为单行注释和多行注释
//这是单行注释
/*
*这是一个较长的
*多行注释
*/
语句
在JavaScript中,语句一般我们都会采用以分号结尾,每条语句独占一行的形势来书写代码,当然,如果一条语句后面不添加分号也不会报错,但是在进行代码压缩的时候可能会带来一些问题,所以还是建议每条语句加上分号。
标识符
所谓标识符,就是指用来标识某个实体的一个符号。再说通俗一点,就是自己起一个名字,这个名字可以用来作为变量名,函数名,对象名等。在JavaScript中,虽然说标识符是自己取名字,但是也是需要遵守一定的规则, 其命名的规则大致可以分为2大类:硬性要求和软性要求
硬性要求
●1.可以是由数字,字母,下划线和美元符号组成,不允许包含其他特殊符号●2.不能以数字开头
●3.禁止使用JavaScript中的关键词和保留字来进行命名
●4.严格区分大小写
软性要求
●望文知意
命名的三种方法
匈牙利命名法
匈牙利命名法是微软公司下面以为匈牙利籍的程序员所发明的命名法则,其特点是标识符的名字以一个或者多个小写字母开头,表示了该变量的数据类型。
驼峰命名法
驼峰命名法实际上分为两种,一种是大驼峰,另外一种是小驼峰。
●大驼峰又被称之为帕斯卡命名法,就是每一-个单词都是首字母大写
例如: UserName
●小驼峰和大驼峰的区别在于,小驼峰的第一个单词的首字母是小写,后面单词的首字母是大
写
例如: userName
蛇形命法
这种命名法常见于Linux内核,C+ +标准库,Boost以及Ruby, Rust等语言蛇形命名法的特点在于单词与单词之间使用下划线进行分隔例如: user_ name, my_ first_ name
关键字和保留字
首先需要弄清楚关键字和保留字的区别是什么。
ECMA-262描述了-组具有特定用途的关键字。这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字是语言本身所保留的,不能用作标识符。
ECMA-262还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途。但它们有可能在将来被用作关键字。
JavaScript中的关键字与保留字如下:
abstract、await、 boolean、 break、 byte、 case、catch、 char、 class、 const, continue、debugger、default、 delete、 do、double、 else、 enum、export、 extends、 false、 final、finally、float、 for、 function、 goto、 if、 implements、 import、 in、instanceof、 int、interface、let、 long、 native、 new、 null、 package、 private、 protected、 public、 return、short、static、 super、 switch、 synchronized、 this、 throw、 throws、 transient、 true、 try、typeof、var、 volatile、 void、 while、 with、 yield
数据类型
简单数据类型
简单数据类容一共有6种:string,symbol,number,boolean,undefined,null,其中symbol类型是在ES6里面新添加的基本数据类型
复杂数据类型
复杂数据类型只有一种:object;包括JavaScript中的数组,正值等,器类型都是object类型。
查看数据类型
在JavaScript中,我们可以通过typeof运算符来查看一个数据的数据类型
变量
接下来我们需要探讨一下对于任何编程语言来讲都是非常重要的一个东西,变量。所谓变量,就是用于引用内存中存储的一一个值。当然, 我们在使用变量之前,还需要先做的一件事儿就是声明变量。
声明变量
在JavaScript中声明变量的方式有3种: var ,let ,const 。其中var现在已经不推荐使用了,因为会有变量提升等问题。(后面我们会具体来探讨此问题)
const和let的区别在于,const 所声明的变量如果是简单数据类型,那么是不能够再改变的。而let所声明的变量无论是简单数据类型还是复杂数据类型,在后面是可以改变的。
使用var声明变量
前面有提到过,在JavaScript中声明变量的方式有3种: var, let , const。其中var现在已经不推荐使用了。这是因为使用var来声明变量会伴随着一些问题。 当然,这些问题也经常被看作是JavaScript的一些特点,例如重复声明和遗漏声明。
重复声明
如果是使用var关键字来声明的变量,那么是允许重复声明的。只不过这个时候会忽略此次声明。如果重新声明并且带有赋值,则相当于是重新赋值
重复声明不带有賦值操作,JS引擎会自动忽略后面的变量声明
局部作用域
在JavaScript中,一对大括号就可以产生一个局部作用域。局部作用域里面的变量称之为局部变量,既然是局部变量,那么就只能在这个局部的作用域里面就能访问到,外部是访问不到的