1. var a; // declare a variable
  2. a = 3; // variable assignment
  3. var b = 4; // declare a variable and assign it with a value.
  4. var x=1, y =2; // multiple variables declaration
  5. var x = 1, y;

命名规范

  1. 不能以数字开头,可以以_ 或者 $ 或者 字母 开头
  2. 关键字与保留字不可以使用
  3. 命名要有语义化
  4. 变量名小驼峰 myName,class名 大驼峰

JS的值

JS的值分成原始值(基本类型)与引用值

原始值

Number String Boolean undefined null

  1. var num = 1;
  2. var str = "this is a string";
  3. var bool = true;
  4. var undef = undefined; // 变量初始值
  5. var nul = null; // 空值
  6. // 这里变量的值是根据右边的值类型来判断的。右边什么类型,变量就是什么类型

引用值

object array function date RegExp

  1. var arr = [1, 2];
  2. arr.push(5);
  3. // arr [1, 2, 5]

NaN与自己不相等

  1. 语义角度

NaN: Not a Number 表示运算的过程出错了,对用户进行告警。(早期js并没有提供isNaN方法 https://stackoverflow.com/questions/1565164/what-is-the-rationale-for-all-comparisons-returning-false-for-ieee754-nan-values)
image.png

  1. 数学角度

Infinity 代表无穷大,在数学上可以用图像表现出来(1/0)
而0/0返回NaN在数学上暂时无法表达出来

栈与堆

栈先进后出,原始值都存在栈内存里

  1. var a = 3;
  2. var b = a;
1005 a 3
1004 b 3
  1. var a = 3;
  2. var b = a;
  3. a = 4;
1005
3
1004 b 3
1003 a 4

并没有主动去清除1005的内存数据,而是在1003位置再去重新弄一次

引用值实际内容存在堆内容,栈内存保存相关的地址

  1. var arr1 = [1, 2, 3]
  2. var arr2 = arr1;

1-variable - 图2

  1. var arr1 = [1, 2, 3]
  2. var arr2 = arr1;
  3. arr2 = [1]; // 引用值发生改变了,arr2的栈中指向新的地址

1-variable - 图3