JavaScript核心之语法
一、基础语法
1、字符区分大小写
在JavaScript中所有的关键字、变量、函数、对象等都是严格区分大小写的。
2、注释
JavaScript支持两种注释的方式,分别为单行注释和多行注释:
- 单行注释
<script> //这是单行注释 var a = 2; </script>
在“//”行尾的内容都会被注释掉。
- 多行注释
/* 这是多行注释 console.log('hello') */
在“/*”与“*/”之间的内容都会被注释掉,注意的是这种注释不能有嵌套的注释。
3、分号
JavaScript语言使用分号将语句隔开。缺少分号,一条语句就成为下一条语句的开始,当然如果语句独占一行是可以省略分号的:
//x=1后的分号不能省略 var x=1;var y=2; //x=1后的分号可以省略 var x=1 var y=2
4、标识符
在JavaScript中,标识符用来对变量或者函数进行命名。标识符必须以字母、下划线(_)、美元符($)开始,后面的字母可以是字母、数字下划线或者美元符,其中数字是不允许作为首字母出现的。
// 合法的标识符实例 var a = 2 var _b = 3 var $ab = 4
其中关键字与保留字均不可以作为标识符出现,但标识符可以包含这些。
二、关键字
break | case | catch | continue | debugger |
default | delete | do | else | finally |
for | function | if | in | typeof |
var | void | while | with | instanceof |
new | return | switch | this | throw |
try |
三、保留字
JavaScript保留了一些在当前版本没有使用的关键字,但是在以后的版本可能会使用到这些关键字:
boolean | byte | char | class | const |
double | enum | export | extends | final |
float | goto | implements | import | int |
interface | long | native | package | private |
protected | public | short | static | super |
synchronized | throws | transient | volatile |
四、变量
(一)变量命名
变量是用标识符进行命名,也就是:
-
-
变量名只能以字母、下划线、美元符开头
-
变量名不能使用关键字和保留字
(二)变量声明
在JavaScript中,使用一个变量前应先对其进行声明,变量是使用var来进行声明的。
//单个声明 var i; var j;
//批量声明 var i,j;
//变量声明与赋值同时进行 var i=1,j=2;
注意:
- 如果声明了变量,但是并没有给它赋值,那么它的初始值是undefined
- 如果读取一个没有声明的变量会报错
- 如果重复声明带有初始化器,这相当于赋值
- 如果给一个未声明的变量赋值,这相当于全局创建了这个变量
(三)变量作用域与声明提前
1、变量作用域
变量作用域是程序源代码中变量的作用区域。它分为全局作用域与局部作用域,全局作用域是全局变量作用的区域,在JavaScript代码中任何地方都是有定义的;局部作用域是局部变量作用的区域,在函数体内声明的变量或者函数参数变量,也只是在函数体内有定义。
局部变量可以覆盖全局变量的。在函数体内,局部变量的优先级高于同名的全局变量。
var variable = 'hello'; function checkscope() { var variable = 'world' return variable } var result = checkscope() console.log(result) //world
JavaScript使用的是函数作用域,也就是说如果函数体内有if、for等语句{}中声明的变量在整个函数体内都是可见的。
function scope(){ var x = 10; if (x>1){ var y =2 } console.log(y) //在整个函数体内都是可见的,尽管它在代码块中 } scope()
2、声明提前
变量在函数体内始终是可见的,如果是下面这种情形的话:
function scope(){ console.log(a) //undefined var a = 10; console.log(a) //10 } scope()
a变量是在函数体内,所以它都是可见的,但是只有执行到var语句时候才会被真正的赋值。这与下面的情形是一样的:
function scope() { var a; console.log(a); //undefined a = 10; console.log(a) //10 } scope()