JavaScript基本语法

一.基本词法

​ JavaScript语法就是指构成合法的JavaScript程序的所有规则和特征的集合,包括词法和句法.词法包括字符编码 命名规则,标识符,关键字,注释规则,注释字符用法等.

1.字符编码

​ JavaScript程序使用Unicode字符集编写.Unicode字符集中每个字符使用两个字节来表示,这意味着用户可以使用中文来命名JavaScript变量

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<script>
    var 人名="老张";
    function 睡觉() {
        alert(+":快睡觉!")
    }
    睡觉(人名)
</script>
</body>
</html>

以上代码可以正常执行

1554864168465

2.区分大小写

​ JavaScript严格区分大小写,为了避免输入错误,用户可以采用一致的字符大小写形式.例如,遵循习惯了所有字符都采用小写形式,这样可以有效减少输入错误.不过有两点例外.

​ (1)定义JavaScript构造函数时,可以让函数名首字母大写.

​ eg:以下脚本调用预定义的构造函数Date(),创建一个时间对象,最后把时间对象转换为字符串显示出来.

d = new Date()             //获取当前日期和时间
alert(d.toString())        //显示日期

​ (2)如果变量名是多个词语连写,可以考虑部分字符大写

​ eg:“驼峰命名法”,就是在名称中没一个逻辑断点都有一个大写字母来标记

printEmployyePaychecks()

​ 如果使用下划线命名法,则可以用下列方法输入

print_employye_paychecks()

3.标识符

​ 标识符(identifier)表示名称的意思,JavaScript标识符主要包括变量名,函数名,参数名和属性名,合法的标识符命名应该注意如下几条规则,这些规则与C语系其他语言基本相同.

1.第一个字符必须是字母 下划线(_)或美元符号($)
2.除了第一个字符外,其他位置的字符可以使用字母 数字 下划线 美元符号,在ECMAScriptv3中,用户可以使用完整的Unicode字符集来命名标识符,但是不建议使用
3.标识符名称不能与JavaScript关键字或保留字同名.
4.在Unicode v3版本中,可以在标识符中使用Unicode转义序列.

4.直接量

​ 直接量(literal)是在程序中直接显示出来的值,如字符串 数值 布尔值 正则表达式 对象初始化 数组初始化等

"字符串直接量" 		//字符串直接量
123456				//数值直接量
true				//布尔值直接量
/^ab.*/g			//正则表达式直接量
null				//特殊值直接量
[a:1,b:2]			//对象初始化直接量
[1,2]				//数组初始化

5.关键字和保留字

​ ECMA-262描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等.按照规则,关键字也是语言保留的,不能用作标识符

ECMAScript关键字

break	delete	function	retrun	typeof
case	do		if			switch	var	
catch	else	in			this	void
continue false	instanceof	throw	while
debugger finally new		ture	with
default	 for	 null		try

6.分隔符

​ 空格,制表符,换行符,换页符等在JavaScript程序中被统称为分隔符,用来分隔代码中各种记号(如标识符,关键字,直接量,注释等信息).在解析时,JavaScript会自动忽略这些分隔符

7.注释

​ 注释就是不被解析的行或段 //

二.使用变量

​ 变量与值是两个不同的概念:变量相当于容器,值相当于内容.为容器贴个标签,就是变量名. 程序根据标签找到内容所在的位置,然后可以对值进行操作.

1.声明变量

在JavaScript中,声明变量使用var语句:

var a;				//声明一个变量
var a,b,c;			//声明多个变量

当声明多个变量时,应使用逗号运算符分隔变量名

eg:可以再声明中为变量赋值.未赋值的变量,则初始值为undefined(未定义)值

var a;				//声明但没有赋值
var b=1;			//声明并赋值
alert(a);			//返回undefined
alert(b)			//返回1

​ JavaScript允许用户不声明变量,而且直接为变量赋值,这是因为JavaScript解释器能够自动隐式声明变量.但是隐式声明的变量总是作为全局变量而存在的

eg:当在函数中不声明就直接为变量赋值时,JavaScript会直接把他视为全局变量进行处理,由于是全局变量,函数外代码可以访问该变量的值.

function f(){
    a = 1;				//未声明直接赋值
    var b =2;			//声明并赋值
}
f();					//调用函数,实现变量初始化
alert(a);				//返回1
alert(b);				//提示语法错误,找不到该变量

​ 但是,如果尝试读取一个未声明的变量的值,JavaScript会提示语法错误.为变量赋值的过程,实际上JavaScript也会隐式进行声明.在使用变量时,用户应养成良好的习惯:先声明,后续写;先赋值,后运算.

​ var语句声明的变量是JavaScript标准声明变量的方法,同时使用var语句声明的变量是永久性的,不能够是由delete运算符删除该变量.

2.赋值变量

使用(=) 运算符可以为变量赋值,等号左侧为变量,右侧为具体的值

eg:JavaScript在预编译期会优先处理声明的变量.但是,变量的赋值操作发生在JavaScript执行期,而不是预编译期.

function f(){				
    a=1;					//全局变量a赋值为1
    var b=2;				//局部变量b赋值为2
}
try{
    alert(a);				//尝试读取全局变量a
}
chatch(e){
    alert(e.message);		//显示错误信息:变量a未定义
}
f()							//调用函数
alert(a);					//读取全局变量a,返回值为1

​ 在示例中,函数未调用之前,函数内部定义的全局变量是无效的,这是因为在JavaScript预编译期,仅对函数名 函数内各种标识符建立索引.

​ 只有当在JavaScript执行期时,才按顺序为变量进行赋值,并初始化,而在执行期,如果函数未被调用,则函数内代码是不被解析的,所以才有了以上效果

eg:根据JavaScript解析过程,再看下列示例:

var a=1;			//声明并初始化全局变量
(function f(){		
    alert(a);		//返回undefined
    var a = 2		//声明并初始化局部变量
    alert(a);		//返回2
})()

​ 由于在函数内部声明了一个同名局部变量a,所以在预编译期,JavaScript使用该变量覆盖掉全局变量对于函数内部的影响.而在执行期,局部变量a未赋值,所以在函数第1行代码中读取局部变量a的值也就是undefined了.当执行到函数第2行代码时,则为局部变量赋值2,所以在第3行中就显示为2

3.变量的作用域

​ 变量的作用域(scope)是指变量在程序中可访问的有效范围,也称为变量可见性,在JavaScript中,变量作用域可以分为全局作用域和局部作用域.

​ 全局作用域是指变量在整个页面脚本中都是可见的,可以自由访问

​ 局部作用域是指变量仅能在声明的函数内部可见,函数外是不允许访问的.

4.避免变量污染

定义全局变量有3种方式:

在任何函数外面直接执行var语句
var f = 'value';
直接添加一个属性到全局对象上,全局对象是所有全局变量的容器,在web浏览器中,全局对象名为window
window.f = 'value';
直接使用未经声明的变量,以这种方式定义的全局变量为隐式的全局变量
f='value'

JavaScript的全局变量由于在所有作用域中都可见,使用全局变量会降低程序的可靠性

只要把多个全局变量都追加在一个名称空间下,就可以降低与其他应用程序产生冲突的几率,应用程序也会变得更容易阅读.

JavaScript支持函数作用域,定义在函数中的参数和变量在函数外部是不可见的,且在一个函数中的任何位置定义的变量在该函数中的任何地方都可见.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值