var a; // declare a variable
a = 3; // variable assignment
var b = 4; // declare a variable and assign it with a value.
var x=1, y =2; // multiple variables declaration
var x = 1, y;
命名规范
- 不能以数字开头,可以以_ 或者 $ 或者 字母 开头
- 关键字与保留字不可以使用
- 命名要有语义化
- 变量名小驼峰 myName,class名 大驼峰
JS的值
JS的值分成原始值(基本类型)与引用值
原始值
Number String Boolean undefined null
var num = 1;
var str = "this is a string";
var bool = true;
var undef = undefined; // 变量初始值
var nul = null; // 空值
// 这里变量的值是根据右边的值类型来判断的。右边什么类型,变量就是什么类型
引用值
object array function date RegExp
var arr = [1, 2];
arr.push(5);
// arr [1, 2, 5]
NaN与自己不相等
- 语义角度
NaN: Not a Number 表示运算的过程出错了,对用户进行告警。(早期js并没有提供isNaN方法 https://stackoverflow.com/questions/1565164/what-is-the-rationale-for-all-comparisons-returning-false-for-ieee754-nan-values)
- 数学角度
Infinity 代表无穷大,在数学上可以用图像表现出来(1/0)
而0/0返回NaN在数学上暂时无法表达出来
栈与堆
栈先进后出,原始值都存在栈内存里
var a = 3;
var b = a;
1005 | a | 3 |
---|---|---|
1004 | b | 3 |
var a = 3;
var b = a;
a = 4;
1005 | 3 | |
---|---|---|
1004 | b | 3 |
1003 | a | 4 |
并没有主动去清除1005的内存数据,而是在1003位置再去重新弄一次
引用值实际内容存在堆内容,栈内存保存相关的地址
var arr1 = [1, 2, 3]
var arr2 = arr1;
var arr1 = [1, 2, 3]
var arr2 = arr1;
arr2 = [1]; // 引用值发生改变了,arr2的栈中指向新的地址