本文主要学习JavaScript高级程序设计(第4版)
1. 语法
1.1 JavaScript的组成
完整的JavaScript由三部分组成:
ECMAScript(核心)
DOM(文档对象模型)
BOM(浏览器对象模型)
1.2 语法由谁定义
由ECMA-262以一个名为ECMAScript的伪语言定义了js的语法、标识符、数据类型等功能,ECMAScript只是一种规范,而JavaScript实现了ECMAScript
1.3 语法风格
ECMAScript的语法是一种宽松的语法,借鉴C语言和类C语言,如java
1.4 区分大小写
ECMAScript中的一切区分大小写,如变量,函数名,操作符等
1.5 标识符🔣
标识符:变量、函数、属性或者函数参数
其组成应遵循以下规则:
- 第一个字符必须是字母,下划线(_)或美元符号($)
- 其他的可以是字母,下划线、美元符号和数字
也就是说:数字绝对不能做开头!!!
另外,字母可以是拓展ASCII码中的字母,也可以是Unicode的字母(不推荐使用中文做变量😂)
1.5.1 驼峰书写法🐫
依照惯例,ECMAScript中的标识符建议以驼峰大小表示,即第一个字母首字母小写,后面几个字母首字母大写
,如:
var apple;
var appleNumber;
var appleAndBananaNumber;
1.5.2 不是符合标识符规范的就能成为标识符
❗️ 关键字、保留字、true,false,null都不能作为标识符
这是关于关键字、保留字进行介绍
1.6 注释
与C语言一样
单行注释:
//我是单行注释
多行注释:
/*
我是
多行
注释
*/
1.7 严格模式
ES5增加了严格模式(strict mode)
简单来说,他会对ES3不规范的一些写法会被处理,对不安全的活动抛出错误,使用该模式的目的就是为了保证ES3语法能够安全的运行。
它所带来的影响非常的大,初学者暂时只要知道其概念就可以了。
1.8 语句结尾
参照C和java,ECMAScript也要用 ; 结尾,注意这是一种规范,虽然不加也可以运行,但有可能在压缩的时候出现问题。
而且最为重要的一点是:加 ; 有时可以提升性能,因为解析器会在合适的位置补上分号来纠正语法错误,所以如果你一个分号不写,解释器会累死,得帮你加那么多个分号,当然性能会受到影响了。
console.log("关爱机器,记得分号");
1.9 块
我们如果学过C语言,应该都知道,if这种条件控制语句,语句内部只有一条的时候,可以不用{}括起来,JS同样也是,例如:
if(true)
var a = 1;
但是,⚠️ 不推荐,这里涉及到块作用域的知识,在let关键字部分会详细讲解。
还是建议,无论多条还是单条语句都用{}括起来
if(true)
{
var a = 1;
}
if(true)
{
var b = 2;
var c = 3;
}
2. 关键字与保留字
ECMA-262描述了一组保留的关键字,这些关键字有特殊作用。比如开始循环,打破循环,函数的返回值等,所以为了避免语义的混乱,保留的关键字不能作为标识符和属性名。
大部分关键字如下:
但规范也知道未雨绸缪,同时描述了一组未来的保留字(未来版本更新很有可能会升级为关键字),同样不能作为标识符和属性名。
主要也是为了版本的兼容性问题,如果我执意在当前版本中使用未来的保留字作标识符(假设操作可行),版本更新后,我的标识符与关键字产生了语义冲突,这时候修改起来就很麻烦,甚至带来经济损失。
所以,无论是现在的关键字也好,未来的保留字也罢,都不能作为标识符和属性名。
3.变量
3.1 简述
ECMAScript变量是松散类型的,也就是说变量可以保存任何类型的数据。近几年很火的python也是这种类型的,而Java和C自然就不是了。
而变量的声明依靠3个关键字:
- 所有版本都可以用的
var
- ES6新出的
let
和const
(既然是ES6出的,肯定就只能在ES6及之后的版本使用)
他们三个基本功能都差不多,但也是为什么很多教程一直都用var声明变量,实际上var这个关键词会带来很多问题,下面我们就来具体了解了解他们的区别。
3.2 var关键字
3.2.1 定义
定义很简单:
var + 变量名;
//例如
var people;
但需注意的是,像上面这样声明后不初始化,也就是没有给people一个具体的值,这时候如果直接打印people,那么得到的结果将是undefined
(六大基本数据类型之一)
所以,建议:一定义,就给值
var people = "zuolun";
3.2.2 改值
由于变量是松散类型,所以我可以更改变量里存在的值,这里依照我个人的理解可以分为两种情况:
- 改类型,虽然可行,但 ⚠️不推荐
var people = "zuolun";
people = 2;
- 改值,但不变类型,可行且推荐
var people = "zuolun";
people = "zuolun7"
3.2.3 声明的作用域
今天就先到这了,未完待续❤️
如有错误,敬请指正,欢迎交流🤝,谢谢♪(・ω・)ノ