JavaScript变量&语句基本规则
文章目录
1. JavaScript的变量
HTML&CSS不能称为编程语言,编程语言基本的一点就是有变量。
1.1 变量声明
- 声明、赋值分解
变量的使用,需要声明和赋值,声明和赋值可以分开写也可以一起写
var a;
a=100;
var b=200;
- 单一var模式:使用一个var关键字声明由逗号分隔的多个变量。
var a,
b=90,
c=50,
d,
e;
写法如上,不同变量用逗号隔开,并且为了规范代码,不同变量之间要回车。
单一var模式的好处:
- 提供一个单一的地址以查找到函数需要的所有的局部变量;
- 防止出现变量在定义之前就被使用的逻辑错误;
- 帮助牢记要声明变量,以尽可能少地使用全局变量;
- 更少的编码 ,无论是输入代码还是传输代码都更加少了。
1.2 变量的命名规则
- 变量名必须以英文字母、英文下划线(_)或美元符号($)开头
- 变量名可以包括英文字母、下划线、美元符号、数字
- 不可以用系统的关键字、保留字作为变量名
- 按照惯例,ECMAScript 标识符采用驼峰命名法
1.3 值类型(数据类型)
1.3.1 原始值
- number(数字型):表示整数或浮点数,可以表示十进制以及二进制(0B)、八进制(0)和十六进制(0x)的数,另外还有特殊的数字:infinite(正无穷)、-infinite(负无穷)、NaN(非法数字);
- string(字符串型):用单引号或双引号括起来,注意转义字符的存在;
- boolean(布尔型):逻辑值型/真假值型,只有True和flase两个值;
- undefined:一般用于提醒变量未经赋值就使用;
- null:空,没有特别的意义,主要用于占位。
- Symbol(符号)是 ECMAScript 6 新增的
1.3.2 引用值
有array,object,function,date,RegExp等引用值,暂时不详细展开。
1.4 原始值和引用值的区别
1.4.1 原始值是存放在stack(栈)里面的,引用值大致是存放在heap(堆)里面的。
栈的特点是,first in, last out,先进后出。
原始值的值直接存放在栈中,存放顺序由栈底向上。且两个原始值之间相互赋值是,相应栈内容的拷贝。
例1:
var a = 10;
var b;
b = a;
a = 20;
此时,a的输出值是20,b的输出值是10。
栈内存地址 | 值 |
---|---|
… | … |
1008 | |
a(1009) | 20 |
b(1010) | 10 |
1011(栈底) | 10 |
引用值的存放是,将值存放在堆中,并在栈中存放堆的地址
两个变量间的赋值是,栈内容的拷贝
例2:
var arr = [1,2];
var arr1 = arr;
arr.push(3);
此时,arr的输出值为1,2,3,arr1的输出值也是1,2,3
栈内存地址 | 值 |
---|---|
… | … |
1008 | |
1009 | |
arr1(1010) | heap1008 |
arr(1011)(栈底) | heap1008 |
堆内存地址 | 值 |
---|---|
… | … |
1008 | [1,2,3] |
1009 | |
1010 | |
1011 |
例3:
var arr = [1,2];
var arr1 = arr;
arr = [1,2,3];
此时,arr的输出值是1,2,3,而arr1的输出值是1,2。arr的重新赋值,使arr的堆内存地址发生了变化。
栈内存地址 | 值 |
---|---|
… | … |
1008 | |
arr(1009) | heap1009 |
arr1(1010) | heap1008 |
1011(栈底) | heap1008 |
堆内存地址 | 值 |
---|---|
… | … |
1008 | [1,2] |
1009 | [1,2,3] |
1010 | |
1011 |
- 原始值是不可改变的,如例1中重新给a赋值,原本栈底的数据不会改变,而是在新的内存空间放入新值,使a指向新的栈地址。
2. JavaScript语句的基本规则
2.1 语句后面要用分号结束
但有个别语句后面不用加分号,例如函数后面,以及for和if后面不用加。
2.2 JavaScript语法错误会引发后续代码终止,但不会影响其他代码块
其中,错误分为两种:
- 低级错误(语法解析错误)
- 逻辑错误(标准错误,情有可原)
代码在解释执行之前会通篇扫描有无语法解析错误,若有这种错误,代码一行也不会执行。
逻辑错误不会被通篇扫描中发现,若无低级错误,就可以逐行解释代码,遇到逻辑错误就会终止解释。
不管哪种错误,只会影响当前代码块的执行,而不会影响其他代码块。