从0开始,一点一点学会JavaScript【连载中】

发布于:2022-10-18 ⋅ 阅读:(533) ⋅ 点赞:(0)

本文主要学习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新出的letconst(既然是ES6出的,肯定就只能在ES6及之后的版本使用)

他们三个基本功能都差不多,但也是为什么很多教程一直都用var声明变量,实际上var这个关键词会带来很多问题,下面我们就来具体了解了解他们的区别。

3.2 var关键字

3.2.1 定义

定义很简单:

var + 变量名;
//例如
var people;

但需注意的是,像上面这样声明后不初始化,也就是没有给people一个具体的值,这时候如果直接打印people,那么得到的结果将是undefined(六大基本数据类型之一)

所以,建议:一定义,就给值

var people = "zuolun";

3.2.2 改值

由于变量是松散类型,所以我可以更改变量里存在的值,这里依照我个人的理解可以分为两种情况:

  1. 改类型,虽然可行,但 ⚠️不推荐
var people = "zuolun";
people = 2;
  1. 改值,但不变类型,可行且推荐
var people = "zuolun";
people = "zuolun7"

3.2.3 声明的作用域

今天就先到这了,未完待续❤️

如有错误,敬请指正,欢迎交流​🤝,谢谢♪(・ω・)ノ


网站公告

今日签到

点亮在社区的每一天
去签到